我的同事已确定React Context可能存在问题。他已经在CodeSandBox中创建了两组代码来演示该问题。
Redux版本(可以正常使用)
上下文版本(说明问题)
还要注意,AppContext
中的嵌套上下文模式派生自Kent C. Dodds:https://kentcdodds.com/blog/how-to-use-react-context-effectively
我想知道我的同事是否发现了React Context的根本缺陷,或者我们使用不正确?换句话说,可以修改上下文代码,以使组件3和整个App不会在每次按键时重新呈现吗?
答案 0 :(得分:1)
问题是React的默认行为是始终递归渲染。当父组件渲染时,React将重新渲染该子树中的每个后代组件。
当您有一个存储状态并将其置于上下文中的根组件时,该根组件中的setState()
使其重新呈现,然后React也将使所有子代也呈现。 / p>
为避免这种情况,您需要在React.memo()
组件上添加PureComponent
(或shouldComponentUpdate
或使用AppInner
),以防止重新渲染当其父级呈现时。