我想知道我是否可以在图书馆里有一个redux商店,应用程序也有一个redux商店



我对React真的很陌生,需要问一下。我可以在库中拥有ReactJs Redux存储,然后在也有Redux存储的应用程序中使用该库吗?

他们都这样做:

<Provider store={store}>
..App
</Provider>

我学习了ReactJs,但不确定我是否理解它是如何构建的——Webpack是如何在这里加载代码的。

  • 这两个React Store会发生冲突吗
  • 它们能独立存在吗
  • 他们可以共享Reducer吗?(假设应用程序希望使用库Redux商店并向其发送调度(

我已经测试过做一些操作,但无法使其工作。这就像Redux在第一次加载库后,它无法加载应用商店,但我是一个新手,所以必须询问

这两个React Store会发生冲突吗?/它们能独立存在吗?

使用createStore创建的两个不同的存储不会碰撞,并且可以独立存在。

在后台,每个存储实例都有一个subscribe方法和它自己的subscriber数组。

当使用react-redux Provider组件时,您使用react的上下文API将存储的实例发送到组件树下。该实例将可用于提供程序的组件的所有子级和已故者。如果存在其他提供程序,则该提供程序的值将覆盖更高的提供程序。

因此,如果您将另一个Provider与库中存储的另一个实例一起使用,则它将仅对从库组件开始的组件树生效。只要构图正确,就不会发生碰撞。

他们可以共享Reducer吗?

Reducer只是纯粹的函数,这意味着它们不应该有任何副作用。因此,如果需要,您可以导出和重用相同的reducer逻辑,只需要在每个存储实例中注册它们。

最后,我不同意这里的其他答案,即你不应该使用多个商店。您有一个确切的用例,其中一个单独的存储是合理的,其中您的主应用程序使用一个存储,而您的独立库使用另一个不相关的全局状态。

在我看来,编程世界中的一切都是可能的,当然,拥有多存储也是可能的。

你问了几个问题,首先,我回答了他们,然后再解释一点。

我可以在库中拥有Reactjs Redux存储,然后在也有Redux存储的应用程序中使用该库吗?

  1. 是的,有可能,使Redux易于使用的著名库是Redux Toolkit,它在应用程序中有一个非常容易使用和实现的流程,甚至它有一个CRA模板,您可以基于reduxnpx create-react-app [my-app-name] --template redux或redux typescriptnpx create-react-app my-app --template redux-typescript创建应用程序(零配置(。它工作正常

这两个React Store会发生冲突吗?它们能独立存在吗?

  1. 不,它们不会冲突,因为每个存储(更不用说是redux、mobx或其他什么(都有一个Provider,您应该使用该<Provider store={store}>包装部分或整个应用程序,所以如果您想有两个存储,您可以添加两个Provider,它们不会碰撞。但是,在连接和从存储中获取一些数据时,您应该注意要从哪个提供者调用。因此他们将能够独立存在
<ReduxOneProvider store={storeOne}>
<ReduxTwoProvider store={storeTwo}>
<MobxProvider store={mobXStore}>
<App>
</MobxProvider>
</ReduxTWoProvider>
</ReduxOneProvider>

但是,总的来说,我不喜欢多商店,更多信息请阅读这里

他们可以共享Reducer吗?(假设应用程序希望使用库Redux商店并向其发送调度(

  1. 是的,你知道,reducer函数是单独的纯函数,位于一个文件夹中,当你想建立你的商店时,你应该收集这些函数并combine它们,所以,答案是肯定的,但请考虑,来自react-reduxconnect函数需要两个函数,mapStateToPropsmapDispatchToProps,在第二个循环中,您可以使用dispatch函数调用一个reducer。因此,您将在所有商店中重新渲染

我的意见:

请避免有多个商店,即使有一个并处理它,也会使项目有点难以维护。你想如何处理多重。它使问题变得复杂。

是的,这是可能的。为了简单起见,库是一个完全独立的包,您可以在其中以正常方式使用redux。当您将库的组件导出到外部世界时,以同样的方式导出您希望在使用库的应用程序中使用的存储或调度。

相关内容

最新更新