将React与Redux结合使用时的关注点分离(Clean Architecture)



我有一个问题,最近我正在研究清洁架构。即:我知道当我想在React中使用Redux时,我必须这样做:

ReactDOM.render(                 
<React.StrictMode>               
<Provider store={store}>                   
<App />               
</Provider>           
</React.StrictMode>,           
document.getElementById('root') )

然后,我使用useSelector和useDispatch(hook(来选择数据并调度操作。。。在我的react组件中。但是,我(在我看来(看到了一个问题。这就是我的react应用程序与这个状态管理工具(redux(的高度耦合。所以,如果将来Redux过时了,或者我不想使用Redux,我想使用Recoil、MobX或新的现代状态管理工具等……或者,在我的应用程序中,我想将Redux与其他工具(Recoil…(结合使用来管理我的应用程序状态。所以,我想要react和redux之间的松散耦合。

但是,我看到很少有人谈论这个问题。或者我在搜索错误的关键词。或者我在react和redux中思考"关注点分离"的方式有问题吗。

有人能让我重新审视一下这个问题吗?

附言:我的英语不好。我希望每个人都能理解我的问题?非常感谢。

我与两个主要的React状态管理器都有过接触经验:ReduxMobx,我也遇到过同样的问题。

一种可能的解决方案可能是用您的自定义挂钩包装状态管理器逻辑,该挂钩将接收redux状态和触发器操作。但如果你有一天决定切换到,比如说,Mobx,你会看到:

Mobx反应性的工作方式与redux不同

首先,您将面临将组件封装在observer函数中的必要性,该函数为组件添加了耦合。此外,由于Mobx的反应性依赖于值去引用,因此重构组件以使其与Mobx兼容还需要一些努力。您可以在Mobx文档中阅读相关内容。https://mobx.js.org/understanding-reactivity.html

正如我所看到的,如果您的组件依赖于业务逻辑,那么您就无法使它们完全与状态管理器无关。无论如何,状态接收和状态更新逻辑将出现在您的React组件中,将您的项目放到新的轨道上需要一些时间和精力。

我看到的唯一选择是将React组件分为两种类型:

  1. 容器组件。所有状态管理器逻辑都在这里。它接收应用程序状态块,触发操作,并将道具传递给UI组件
  2. UI组件用于构建DOM元素的组件。它可能有自己的状态,但主要呈现逻辑是基于组件道具的

这将使您能够在未来降低更改状态管理器的成本,因为您可以逐步重写容器组件,而不必太担心UI。

最新更新