Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 这个.setState({})保证会导致重新渲染吗_Reactjs - Fatal编程技术网

Reactjs 这个.setState({})保证会导致重新渲染吗

Reactjs 这个.setState({})保证会导致重新渲染吗,reactjs,Reactjs,我继承了一些要维护的代码,其中有一行: this.setState({}); // Force update 这是否保证会导致重新呈现?设置状态以不变的方式将作为参数传递的对象合并到实际状态this.setState({})不会将任何内容合并到state,但实际上会返回一个新对象,React执行的浅层比较将始终断言为false,并且将触发重新渲染,除非使用shouldComponentUpdate明确取消。因此,是的,在这种情况下,它相当于强制更新,并且它与此相同。根据文档和其他几种方法的顺序

我继承了一些要维护的代码,其中有一行:

this.setState({}); // Force update

这是否保证会导致重新呈现?

设置状态以不变的方式将作为参数传递的对象合并到实际状态
this.setState({})
不会将任何内容合并到state,但实际上会返回一个新对象,
React
执行的浅层比较将始终断言为
false
,并且将触发重新渲染,除非使用
shouldComponentUpdate
明确取消。因此,是的,在这种情况下,它相当于
强制更新
,并且它与此相同。

根据文档和其他几种方法的顺序

  • 静态getDerivedStateFromProps()
  • shouldComponentUpdate()
  • render()
  • getSnapshotBeforeUpdate()
  • componentDidUpdate()
  • 有关详细信息,请参见此

    您实际上可以轻松地:

    import React,{Component}来自'React';
    从“react native”导入{Button};
    类测试扩展了组件{
    render(){
    console.log('render');
    返回这个.setState({})title='Test'/>;
    }
    }
    导出默认测试;
    
    每次单击按钮时,都会触发console.log


    有趣的一点是,如果将
    this.setState({})
    替换为
    this.setState()
    ,则单击后不会重新渲染。

    这取决于具体情况。若您想要呈现一个组件,react会在内部检查DOM是否等于previous(若组件的道具根本并没有改变,就会发生这种情况)。如果dom与以前的版本相同,则react检查
    shouldComponentUpdate
    forceUpdate
    不同于总是呈现组件的.setState({})。

    使用
    this.forceUpdate()
    可以保证强制重新呈现,但会对代码结构和实践提出疑问。谢谢-但是.setState({})会强制更新吗?这与其中引用的答案和文档相矛盾