【发布时间】:2020-06-04 02:31:05
【问题描述】:
在这个example
function App() {
const [value1, dispatch1] = useReducer(reducer, initialState1);
const [value2, dispatch2] = useReducer(reducer, initialState2);
return (
<React.Fragment>
<button
onClick={() => {
dispatch1({ type: "setFirstName", firstName: "nick" });
}}
>
change1
</button>
<button
onClick={() => {
dispatch2({ type: "setFamilyName", familyName: "fname" });
}}
>
change2
</button>
<JediContext1.Provider value={value1}>
<Display1 />
</JediContext1.Provider>
<JediContext2.Provider value={value2}>
<Display2 />
</JediContext2.Provider>
</React.Fragment>
);
}
我使用来自here 的每个推荐的两个上下文。但是我可能误解了,也许github问题是指另一个案例? 因为它似乎不能解决我的问题。
上面代码的问题是如果我点击change1按钮,它会改变value1,组件Display2 也会重新渲染,甚至不会消耗 value1。
实际上这对我来说很有意义,因为 我在 App 中更改了状态,因此它会重新渲染它的所有子级。 但是我不明白 github 链接中推荐的使用,因为它没有不在这里解决我的问题?
如果您有大型应用程序和根上下文提供程序,这可能会导致性能问题。
【问题讨论】:
-
这是已知的事情,但由于未知原因,它已被讨论just recently。与钩子无关,仅与 Context API 的工作方式有关。希望很快有人会用例子来写出很好的答案。
标签: javascript reactjs react-hooks