gpt4 book ai didi

reactjs - Provider 实例之间是否共享从 React 中的相同上下文派生的上下文值?

转载 作者:行者123 更新时间:2023-12-04 01:37:43 25 4
gpt4 key购买 nike

我有一个 Provider 组件,我通过钩子(Hook)导出其值。

我所描述的简单实现是这样的:

// SomeProvider.jsx
const SomeContext = React.createContext(null);

function SomeProvider(props) {
const [state, setState] = useState(null)

useEffect(() => {
//some logic
setState(newValue)
}, [props.someValue])

return <SomeContext.Provider value={state} {...props} />;
}

const useSome = () => React.useContext(SomeContext);

export { SomeProvider, useSome };

现在,如果我想在多个地方使用这个上下文提供程序怎么办?例如
// App.jsx
<SomeProvider someValue={valueOne}>
<SomeComponent />
</SomeProvider>
<SomeProvider someValue={valueTwo}>
<SomeOtherComponent />
</SomeProvider>

在哪里 valueOnevalueTwo可能会发生变化
// SomeComponent.jsx
import { useSome } from 'SomeProvider';

function SomeComponent() {
const someValue = useSome();

return ....
}
// SomeOtherComponent.jsx
import { useSome } from 'SomeProvider';

function SomeOtherComponent () {
const someValue = useSome();

return ....
}

这种方法会导致两个 SomeProvider实例共享一个共同的值(value),从而把事情搞砸了?

如果是这种情况,那么最终得到每个 SomeProvider 的正确方法是什么?有自己的“私有(private)”值(value)吗?

如果不是这种情况,这是如何工作的,因为所有 Providers 都来自同一个 React.useContext()调用?

最佳答案

即使 createContext只调用一次,React 会在每次渲染上下文 Provider 时创建这些上下文的实例。当有事打来useContext , React 将沿着渲染树向上查找给定 的最近的 Provider类型 并从 中获取该值实例 在那个背景下。

Example

关于reactjs - Provider 实例之间是否共享从 React 中的相同上下文派生的上下文值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58893944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com