链接多个上下文提供程序在反应本机的同一领域工作

Posted

技术标签:

【中文标题】链接多个上下文提供程序在反应本机的同一领域工作【英文标题】:chaining multiples context providers working on the same realm in react native 【发布时间】:2021-12-07 17:30:32 【问题描述】:

我正在尝试链接多个按不同目的划分的 ContextProviders,以便在 react native 中的同一领域上工作。

<FirstRealmProvider>
   <SecondRealmProvider>
     <FunctionalComonentUsingHooksFromFristAndSecond>
   </SecondRealmProvider> 
</FirstRealmProvider>

我在第一个组件中初始化(打开)领域(它还负责关闭等)并在 useEffect 挂钩的帮助下通过realmRef = useRef&lt;Realm&gt;(null); 将引用保存到它。使用从第二个和第三个组件中的第一个组件导出的上下文函数和集合可以正常工作,除非我在 SecondRealmProvider 中实现另一个 useEffect(无论是否直接访问领域或其导出的引用)。 如果我这样做,则该领域抱怨realmRef.current 为空(在 FirstRealmProvider 的 useEffect 中设置,并且不应为空,除非在 SecondRealmProvider的内部 useEffect 之后调用 useEffect > 已被首先调用。在这种情况下,它似乎不可能通过关注点链接和共享逻辑,并且 FirstRealmProvider 将成为一个多用途的杂乱组件。

请帮我指出我在这里缺少什么。

谢谢。

【问题讨论】:

【参考方案1】:

由于 react 首先在内部组件上进行初始化(调用 useEffect),因此如果这也依赖于初始化,则无法使用外部组件的功能。为了让它正常工作,我添加了一个 is"Particular"ProviderInitialized ,如下所示:

const [nlpIsInitialized, setInitialized] = useState<boolean>(false);

并且每个提供者都会忽略 useEffect,直到外部提供者报告也被初始化。 useEffect 还取决于外部 Provider 的初始化值,现在一切正常。

【讨论】:

以上是关于链接多个上下文提供程序在反应本机的同一领域工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在本机反应中模拟上下文消费者反应元素

为啥反应上下文提供程序组件呈现两次[重复]

React Native Context,如何在多个嵌套文件和组件之间共享上下文

React/Nextjs 上下文提供程序状态在第一次加载/刷新时无法访问,但在状态更改时工作正常

如何在上下文提供程序中使用 axios get 调用来做出反应

在重定向之前需要反应上下文来更新