求知若饥,虚心若愚。
本文主要讲解Redux的基本介绍及其语法
第一眼看上去Redux好像和React有点像,别管Redux是什么,我们只去关心Redux怎么来的。
如果非要定义Redux的话,那么Redux 是 JavaScript 状态容器,提供可预测化的状态管理。
好了,知道大家看不懂,其实我也不能从上面这句话里面理解到什么。没关系,让我来把这句话简单化。
在此之前,给大家看下之前前端人员写的小程序的部分代码:
1 | //红框验证 |
上面的代码只是一个简单的功能实现,就是在做验证。如果用户输入的标题为空、输入的选项不能少于两个、输入的选项不能重复、时间没有选择,会从上到下依次出现红框或者提示信息。
以前用JQuery思想就是获取需要更改样式的DOM,进行addClass操作。现在不能直接操作DOM,因此只能操作这些数据去动态更新DOM。我们把更新DOM的数据叫state
,即状态
。
除了更新DOM的数据叫state,还有很多数据也叫state。
比如:缓存的数据、本地生成尚未持久化到服务器的数据等等。
试想一下,每个页面都有更新DOM、给服务器的数据的state。每个页面小到按钮的切换,显隐交互,大到提交表单数据,从服务器获取数据给予不同页面的展示,这些都离不开state。
除此外,每个页面与页面都有错综复杂的联系,比如一个页面依赖另一页面的数据,一个页面的改动要让另一个页面引起变化,这些也都离不开state。
一两个页面还容易处理,如果有五个页面、十个页面、二十个、五十个…
前端开发者正在经受前所未有的复杂性,难道就这么放弃了吗?当然不是。
Redux所做的事情就是想把所有的state放在一个对象里面
。
Redux这样做有什么好处呢?便于维护和扩展,逻辑不混乱
Redux适用于哪些场景呢?
1.交互复杂的页面
2.一个页面有多个数据来源
3.一个页面的改变,间接影响另一个页面
简单说就是适用于多交互、多页面、多数据源
的应用。
Store 就是保存数据的地方,你可以把它看成一个容器。整个应用只能有一个 Store。
Redux 提供createStore
这个函数,用来生成 Store。
1 | import { createStore } from 'redux'; |
Store对象包含所有数据。如果想得到某个时点的数据,就要对 Store 生成快照。这种时点的数据集合,就叫做 State。
当前时刻的 State,可以通过store.getState()
拿到。
1 | import { createStore } from 'redux'; |
Redux 规定, 一个 State 对应一个 View。只要 State 相同,View 就相同。你知道 State,就知道 View 是什么样,反之亦然。
State 的变化,会导致 View 的变化。但是,用户接触不到 State,只能接触到 View。所以,State 的变化必须是 View 导致的。Action 就是 View 发出的通知,表示 State 应该要发生变化了。
Action 是一个对象。其中的type属性是必须的,表示 Action 的名称,其他属性可以自由设置。
1 | const action = { |
Store 收到 Action 以后,必须给出一个新的 State,这样 View 才会发生变化。这种 State 的计算过程就叫做 Reducer。
Reducer 是一个函数,它接受 Action 和当前 State 作为参数,返回一个新的 State。
1 | const reducer = function (state, action) { |
视图,指每个页面。