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,如果React在重新渲染之前比较(浅层)上一个状态和下一个状态,将减少许多渲染,这有助于优化性能 根据,在调用setState方法时,React始终渲染组件及其子级。应灵活处理组件及其子组件的不需要的重新渲染 React可用于不可变或普通Javascript数据。React提供了一个生命周期挂钩(shouldComponentUpdate),您可以选择使用它来防止重新渲染。但是,对于普通Javascript数据,有时比较数据并决定是否重新呈现数据会造成开销,因为可能会发生这种情况,为了检查数据更

如果React在重新渲染之前比较(浅层)上一个状态和下一个状态,将减少许多渲染,这有助于优化性能


根据,在调用setState方法时,React始终渲染组件及其子级。应灵活处理组件及其子组件的不需要的重新渲染

React可用于不可变或普通Javascript数据。React提供了一个生命周期挂钩(
shouldComponentUpdate
),您可以选择使用它来防止重新渲染。但是,对于普通Javascript数据,有时比较数据并决定是否重新呈现数据会造成开销,因为可能会发生这种情况,为了检查数据更改,您可能需要深入比较数据,并且在最经常需要重新呈现的情况下,react必须在比较状态之后进行DOM更新,这可能比简单的虚拟DOM扩散和更新成本更高


也就是说,您可以在是否使用和/或
ImmutableJS
数据重新渲染的快速决策与实际渲染之间实现折衷。

react有一个选项可供选择,它只取决于开发人员是否使用该选项。“为什么总是在调用setState时渲染?”因为默认情况下,这是更安全的选择。人们可能没有正确地更新他们的状态(例如,
var users=this.state.users;users.push(…);this.setState({users});
),然后他们的组件将无法呈现,他们会感到困惑。一旦您了解了它是如何正确更新的,您就可以使用
PureComponent
或实现正确的生命周期方法。您可以将PureComponent与简单的JS数据一起使用,它将做一个粗略的比较…@Aprillion,是的,我们可以做到。我认为我应该写
PureComponent
和/或ImmutableJS dataHey@ShubhamKhatri这意味着如果我使用不可变Js数据或我不可变地更新存储,那么建议在任何地方使用纯组件,因为即使父组件重新渲染,纯组件的道具没有更改,纯组件也不会重新渲染。你同意吗?