是否保证this.setState({})会导致重新渲染

时间:2019-07-30 13:20:32

标签: reactjs

我继承了一些要维护的代码,其中包含以下行:

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

是否可以保证重新渲染?

4 个答案:

答案 0 :(得分:6)

setState以不变的方式将作为参数传递的对象合并到实际状态中。 this.setState({})不会合并任何内容,但实际上会返回一个新对象,由React执行的浅表比较将始终断言为false并会触发重新渲染,除非用{明确取消了{1}}。所以是的,在这种情况下,它等效于shouldComponentUpdate,并且带有相同的caveats

答案 1 :(得分:3)

您实际上可以轻松test it

import React, { Component } from 'react';
import { Button } from 'react-native';

class Test extends Component {
  render() {
    console.log('render');
    return <Button onPress={() => this.setState({})} title='Test' />;
  }
}

export default Test;

每次单击按钮,都会触发console.log。

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

答案 2 :(得分:1)

根据文档以及其他几种方法

  1. 静态getDerivedStateFromProps()
  2. shouldComponentUpdate()
  3. render()
  4. getSnapshotBeforeUpdate()
  5. componentDidUpdate()

请参阅此link以获取详细的

答案 3 :(得分:-1)

这取决于。如果要渲染组件,请在内部做出反应,以检查DOM是否等于以前的DOM(如果完全不更改组件的属性,则会发生这种情况)。如果dom与以前的版本相同,请进行检查shouldComponentUpdateforceUpdatethis.setState({})不同,后者总是呈现组件。