我知道通常道具或React Component状态的任何变化都会导致它重新渲染,但是什么情况下可以调用setState()
而不会导致重新渲染?在什么情况下,setState()不会导致React Component中的重新渲染?
2
A
回答
1
当从组件React.Component
继承时,React将在组件中调用父组件重新呈现或setState时默认调用render()
。但是,如果在React组件中实现了shouldComponentUpdate(),则可以使更新周期短路。如果您只有有限数量的基本值(字符串,数字,布尔值)或使用不可变数据结构的道具时,这非常有用。然后,你可以简单地做这样的事情:
shouldComponentUpdate(nextProps, nextState) {
return nextState.name !== this.state.name // Don't re-render if name is equal
}
shouldComponentUpdate()的默认实现
shouldComponentUpdate(nextProps, nextState) {
return true;
}
也可以从React.PureComponent基本上实现你的道具和浅层比较继承州。
我会推荐以下相关文章进行了较深入的答案: https://reactjs.org/docs/optimizing-performance.html#avoid-reconciliation 和https://cdb.reacttraining.com/react-inline-functions-and-performance-bdff784f5578(特别是所谓的(PureComponent和shouldComponentUpdate)
这也是理解之间会发生什么区别有用的部分时,渲染功能被称为与和解的算法确实更新DOM什么。更多关于这个here。
0
根据定义,this.setState
导致重新呈现。如果你想改变this.state
没有重新呈现,没有什么是来回阻止你在做一个正常的人工分配。
this.setState({name: 'newname'}) //changes this.state with render
this.state.name = 'newname' //no rerender, but still changes this.state
相关问题
- 1. 在不触发重新渲染的情况下调用setState
- 2. ReactJS不会在setState后重新渲染
- 3. React JS - setState和不需要的重新渲染
- 4. React/Redux组件不会重新渲染
- 5. setState()不触发重新渲染
- 6. React - componentWillMount()中的setState导致UI延迟
- 7. 什么情况会导致NetworkStream.Write阻塞?
- 8. 阵营JS视图不会重新渲染上的setState()
- 9. react-redux数组中的更新项不会重新渲染
- 10. React Axios在setState后没有渲染
- 11. React通过setState重新渲染还是直接DOM操作?
- 12. 当数据被修改时,setState不会触发重新渲染
- 13. 在不创建新缓冲区的情况下渲染对象
- 14. ListView在react-native的状态改变后不会重新渲染?
- 15. React中动态生成的按钮不会重新渲染
- 16. 当重新渲染时,React道具只在渲染时更新
- 17. React shouldComponentUpdate()= false不停止重新渲染
- 18. React组件不会在状态更改时重新渲染
- 19. 什么情况会导致IE8偶尔不加载脚本?
- 20. React-Redux - 如何更新一段状态而不会导致无关组件不必要的重新渲染
- 21. 在不渲染性能的情况下在textarea中显示xml
- 22. 什么情况会导致在Firefox中触发nsiWebProgressListener.STATE_START?
- 23. 为什么我的OpacityMask会导致渲染错误?
- 24. 在什么情况下React类组件会被构造多次?
- 25. 为什么React组件不渲染?
- 26. 如何在不刷新页面的情况下在EmberJS 1.13.8中渲染视图?
- 27. React-Leaflet多边形不会被重新渲染
- 28. Redux&React:调用componentDidUpdate,但不会发生重新渲染
- 29. 为什么我重新渲染时不会调用componentDidMount?
- 30. IE 11上的React重新渲染
是不是使用this.state直接被认为是一个坏习惯?根据React [docs](https://reactjs.org/docs/react-component.html#state): 不要直接改变this.state,因为事后调用setState()可能会替换你制作。将'this.state'视为不可变的。 – Namit
@Namit它是,因为在React世界里,没有必要改变'this.state'没有重投。如果您正在操纵不断变化的数据,但不希望每次都重新渲染数据,那么该数据可能不应该放在'this.state'开头。 – Andrew