React重渲染疑问:invalidFields状态变化时ComponentB会重渲染吗?
问题解答
当invalidFields状态变化时,ComponentB是否会触发重渲染,要分两种情况来看:
默认未优化场景
只要invalidFields的变化导致父组件ComponentA触发重渲染,不管传给ComponentB的invalidInputs属性值有没有改变,ComponentB都会跟着重渲染——这是React的默认行为:父组件重渲染时,所有子组件都会同步执行渲染流程。使用React.memo优化后的场景
如果ComponentB被React.memo包裹做了性能优化,那么只有当invalidInputs的实际值发生变化时,它才会触发重渲染:- 比如
invalidFields从空数组[]变成包含元素的数组,invalidInputs从false变为true,属性值确实改变,ComponentB会重渲染; - 但如果
invalidFields只是内部元素更新(比如从['error1']变为['error2']),它的长度始终不为0,invalidInputs一直是true,属性值没有变化,ComponentB就不会重渲染。
- 比如
内容的提问来源于stack exchange,提问作者Feuerschinken
相关产品推荐
相关产品推荐

