为什么 useContext 可以在没有 Context.Provider 的情况下工作?

Fox*_*Net 6 reactjs react-hooks

如果我不使用 Context.Provider 包装我的组件,你能解释一下为什么 useContext() 对我有用吗?我刚刚使用预定义值导出了“createContext(someValues)”的结果,并在组件中调用了 useContext(exportedContext) 并且它可以工作。每个教程都告诉我要包装组件。React 有什么变化吗?

Oth*_*Ali 10

每当 Provider\xe2\x80\x99s value prop 发生变化时,作为 Provider 后代的所有消费者都将重新渲染。换句话说,如果您不使用组件来包装组件,那么当in更改Context.Provider时它们将不会重新渲染。您将获得仅在第一次渲染中设置的初始值。someValuescreateContext(someValues)

\n

演示在这里

\n


ale*_*rik 5

React.Context一直都是这样工作的。如果组件未包装在 中,Context.Provider它将接收创建上下文时设置的默认值。

Provider 的工作是覆盖默认值,本质上是为 React 组件树提供依赖注入机制。

这是 React 团队的一个很好的答案:https ://github.com/facebook/react/issues/17912