ReactJS,使用相同的参数调用setState

时间:2016-12-25 15:50:29

标签: reactjs

我一直在阅读React文档并遇到了shouldComponentUpdate()。我的理解是每次调用setState()时,都会更新该组件的重新渲染。

我的问题是,如果要更新的值是 SAME 作为当前状态值,是否会触发重新渲染事件?或者我必须手动检查要在shouldComponentUpdate()

中更新的当前值和值

3 个答案:

答案 0 :(得分:9)

官方的React文档声明:

  

默认行为是在每次状态更改时重新呈现...

https://reactjs.org/docs/react-component.html#shouldcomponentupdate

这意味着默认情况下,如果任何组件的render()state值发生变化,则会执行props

您可以使用shouldComponentUpdate()覆盖此默认行为。这是一个仅在状态值发生变化时才更新的示例。

shouldComponentUpdate(nextProps, nextState) {
    return this.state.someValue !== nextState.someValue;
}

注意:此示例完全忽略props。因此,对props的任何更改都不会触发render()

答案 1 :(得分:3)

我不知道我是否正确理解了你的问题,但只有在虚拟dom和真正的dom之间存在差异时才会重新渲染。

正如Jyothi在他的回答中提到的那样,无论在设置状态函数中传递的值如何都将调用render方法,但重新渲染将取决于此render方法返回的内容。

答案 2 :(得分:1)

为@Jyothi关于实施shouldComponentUpdate()以跳过不必要的重新渲染的答案添加更多内容,在React 15.3中他们引入了新概念PureComponent。来自reactjs docs

  

它们之间的区别在于React.Component没有实现   shouldComponentUpdate(),但React.PureComponent用a实现它   浅支柱和状态比较。

这样,只需实现render而不是通常的PureComponent,就可以跳过类组件中Component的不必要调用。关于PureComponent React.PureComponent的文档,shouldComponentUpdate()有一些注意事项:

  

......只是浅析   对象。如果这些包含复杂的数据结构,则可能会产生   对更深层次差异的假阴性。

     

...跳过整个组件子树的prop更新。确保所有的   儿童成分也是“纯粹的”。

在某些情况下,PureComponent的使用可以提高应用的效果。此外,它强制您保持stateprops对象尽可能简单,甚至更好,不可变,这可能有助于简化应用程序结构并使其更清晰。