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