繁体   English   中英

setState之后,React不会重新渲染组件

[英]React does not re-render component after setState

我有一个奇怪的问题。 state已更新,但组件未重新发送。 当我按下“ Add Hi All ”按钮时,必须Add Hi All其他<p>Hi All</p> 但我在屏幕上看不到它们。

有趣的是,如果我将new_row更改为这样的1元素数组

var new_row = [<p key = {key_number + "d"}> Hi all!</p>];

然后将使用parag_s.concat(new_row)代替parag_s.push(new_row)一切正常。 两个变体中state.ps数组的包含似乎绝对相同,但是以某种方式在我使用parag_s.push(new_row)重新渲染过程无法启动。
这就是为什么我觉得自己做错了。 你可以帮帮我吗? 为什么以下代码不起作用?

import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component {
    render() {
        return (
            <BlablablaComponent/>
        );
    }
}

class BlablablaComponent extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            ps: [],
            keyNumber: 1
        }
        this.addRow = this.addRow.bind(this);
    }

    addRow() {
        var parag_s = this.state.ps;
        var key_number = this.state.keyNumber;
        key_number = key_number + 1;
        var new_row = <p key = {key_number + "d"}> Hi all!</p>;
        parag_s.push(new_row);
        var new_state = {ps: parag_s, keyNumber: key_number};
        this.setState(new_state);
   }

    render() {
        return (
            <div>
                {this.state.ps}
                <button type="button" onClick = {this.addRow} >Add Hi All</button> 
            </div>
        );
    }
}

ReactDOM.render(
    <App />,
    document.getElementById('root')
);

setState在数组上执行浅表比较,当您push数组push入数组时,实例不会更改,因此React不会看到更改。 当您使用concat将返回一个新的数组实例。

您可以使用传播运算符而不是concat

 setState({
   key_number,
   parag_s: [...parag_s, new_row]
 })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM