最近遇到开发一个层级比较深的组件;
父组件 Acomp ,
子组件 acomp,bcomp,ccomp
我的方案是:把父组件的state的数据,以props的形式传入到子组件中,并在子组件中调用父组件的回调反向同步到父组件的state ;
遇到的问题( 问题1 ):当我acomp中回调执行时,反向同步父组件state中分配给acomp的值。发现bcomp、ccomp视图也发生了更新,尽管数据还是一样的;理想的状态是,只有acomp发生重新渲染,bcomp、ccomp不发生重新渲染;
我的怀疑方向是:父组件的setstate会导致所有子组件刷新,所以只有在子组件的shouldUpdate里面判断是否要重渲染;
我的优化方向是:父组件不再设置数据state,而是设置props.然后把props以props的形式传入到子组件,子组件用state接收父组件传入的props.所有交互和setstate 都只在子组件内部完成,子组件对外设置方法回去子组件内部的参数;
我的请教的是:
问题1( 如上 )是正常的吗?
码友遇到这种状况一般选择怎么样的组织形式;
如果a的数据只是a组件用,那么就可以用你说的方法,只在a组件内部进行处理,不需要麻烦A组件。
如果a的数据A,b,c中也会用到,那么肯定需要由A组件来处理,或者至少传递给A,然后让他来分发给b和c。
如果还是无法避免a,b,c由于他们本身不需要的数据改动发生render,如果是a,b,c是很大的组件,那么可以用
shouldUpdate
里面做shallowEqual
来进行优化。如果是小组件,由于react本身就有vdom的功能,render
就render
了,你做其他的验证估计还不如让他直接render
。(以上仅个人意见,酌情理解。。。)