一、Redux是什么
Redux 是 JavaScript 状态容器,提供可预测化的状态管理。Redux 除了和 React 一起用外,还支持其它界面库。我的理解就是管理数据的呗。
Redux 和 React 之间没有关系。Redux 支持 React、Angular、Ember、jQuery 甚至纯 JavaScript。但Redux 还是和 React 这类库搭配起来用最好,因为这类库允许你以 state 函数的形式来描述界面,Redux 通过 action 的形式来发起 state 变化。
二、Redux为何出现
JS需要管理的state很复杂,这让运维和更新变得困难,乃至产生其他问题,而复杂度很大程度上是来自于变化和异步这两个概念的混淆,一些库如 React 试图在视图层禁止异步和直接操作 DOM 来解决这个问题,但React 依旧把处理 state 中数据的问题留给了我们,而Redux就是帮我们解决这个问题的。
三、Redux核心概念
要想更新 state 中的数据,你需要发起一个 action,为了把 action 和 state 串起来,开发一些函数,这就是 reducer,一句话就是:reducer 只是一个接收 state 和 action,并返回新的 state 的函数。
对于大型应用,需要很多这样的小函数来分别管理 state 的一部分,再开发一个 reducer 调用这这些 reducer,从而管理整个应用的 state。这就是就是 Redux 思想的全部。
四、Redux三大原则
1. 单一数据源
整个应用的 state 被储存在一棵 object tree 中,并且这个 object tree 只存在于唯一一个store 中。这样有一些好处:
-
这让同构应用开发变得非常容易:来自服务端的 state 可以在无需编写更多代码的情况下被序列化并注入到客户端中。
-
调试也变得容易:可以把应用的 state 保存在本地,从而加快开发速度。
-
以前难以实现的如“撤销/重做”这类功能也变得轻而易举。
2. State 是只读的
唯一改变 state 的方法就是触发 action,action 是一个用于描述已发生事件的普通对象。
3. 使用纯函数来执行修改
为了描述 action 如何改变 state tree ,需要编写 reducers。