杨小福

你也许并不需要 Redux

原文链接: medium.com

你也许并不需要 Redux

许多人经常在不需要 Redux 的情况下就引入了它。因为担心应用会变得越来越大而无法管理,所以许多开发者在一开始就将 Redux 引入到了项目中。带来的结果是我们为了一个很小的功能却不得不编写三个文件来完成,我们为什么要这么做呢,有必要吗?

许多人将他们令人诟病的问题归咎于 Redux, react, 函数式编程,不可变数据类型等等,对此我表示理解。Redux就如同一种可以在不需要模板代码就可以更新应用状态的工具,这就让 redux 变得过于复杂。从另一个方面来说,它就是为此而设计的。

使用 Redux,你必须遵循如下的规则:

  • 使用数据对象和数组来描述应用的状态
  • 通过数据对象来描述应用的变化
  • 使用纯函数来改变应用的状态

不论你是否使用 react 来编写一个应用,上面的这些限制都不是必须的。事实上,这些限制是非常大的,所以你在项目中即使是项目的一部分中使用如上这些规则之前必须认真的考虑清楚。

那么有没有什么好的理由来让我们去使用它呢?

这些限制条件比较吸引我的点是它可以让我们的应用具有如下的特性:

如果你在 an extensible terminal, a JavaScript debugger或者 some kinds of webapps工作, 你可以尝试使用它,至少应该去试试其中的一些特性。(顺便说一句,这些特性并不是redux首先提出来的,感兴趣可以看下 elm-architecture-tutorialom)

然而,如果你刚接触 React, 请不要把 Redux 当做你的第一选择。

你应该首先去学习think in React.然后在慎重的考虑是否真的需要 Redux 以及相关的特性。

如果你太过于纠结于代码是否符合 Redux 规范,那么你或你的团队可能过于看重 Redux 了,它只是你的一个工具而已。

最后,不要忘了,即使你没有使用 Redux 你也可以学习 redux 的开发思路。比如说,给 React 组件增加本地状态。

说真的,本地状态真的是一个非常好的特性。

Redux 将“发生了什么?”和“怎么发生的”很好的分离开来,使得代码得到解耦。

但我们总是应该这样做吗?不,这是一种权衡。

比如,我们可以从我们的组件中抽取出一个 reducer 出来,自己实现一个 Redux.

注意,我们是如何在不同过 npm 安装 Redux 的情况下使用 Redux 的.(Wow!)

也许你不应该这样去抽取你的组件,除非计划从 Redux 的特性中获益(制定一个计划是成功的关键)。

Redux library是一个将 reducers 和 全局 store关联起来的库,通过它我们可以自由的使用 Redux 的特性、优点。

但在这个过程中,你必须权衡好利弊。