上下文值是否在从 React 中的相同上下文派生的 Provider 实例之间共享?
Is context value shared between Provider instances derived from the same context in React?
我有一个 Provider 组件,我通过挂钩导出其值。
我所描述的简单实现是这样的:
// 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>
其中 valueOne
和 valueTwo
可能会发生变化
// 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
实例共享一个共同的值,从而把事情搞砸?
如果是这种情况,最终每个 SomeProvider
都有自己的 "private" 值的正确方法是什么?
如果不是这种情况,这是如何工作的,因为所有提供者都来自相同的 React.useContext()
调用?
即使 createContext
只被调用一次,React 也会在每次渲染上下文提供者时创建这些上下文的实例。当某些东西调用 useContext
时,React 将在渲染树上向上查找给定 type 最近的 Provider 并从 instance[=19] 中获取该值=] 那个上下文。
我有一个 Provider 组件,我通过挂钩导出其值。
我所描述的简单实现是这样的:
// 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>
其中 valueOne
和 valueTwo
可能会发生变化
// 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
实例共享一个共同的值,从而把事情搞砸?
如果是这种情况,最终每个 SomeProvider
都有自己的 "private" 值的正确方法是什么?
如果不是这种情况,这是如何工作的,因为所有提供者都来自相同的 React.useContext()
调用?
即使 createContext
只被调用一次,React 也会在每次渲染上下文提供者时创建这些上下文的实例。当某些东西调用 useContext
时,React 将在渲染树上向上查找给定 type 最近的 Provider 并从 instance[=19] 中获取该值=] 那个上下文。