redux
redux 是一个应用数据流框架,主要是解决了组件间状态共享的问题,原理是集中式管理,主要有三个核心方法,action,store,reducer
三大原则:1、唯一数据源(整个应用的 state 被储存在一棵 object tree 中,并且这个 object tree 只存在于唯一一个 store 中)2、reducer 必须是纯函数(输入必须对应着唯一的输出) 3、State 是只读的, 想要更改必须经过派发 actionredux 的工作流程:
使用通过 reducer 创建出来的 Store 发起一个 Action,
reducer 会执行相应的更新 state 的方法,
当 state 更新之后,view 会根据state 做出相应的变化
1、提供 getState()获取到 state
2、通过 dispatch(action)发起 action 更新 state
3、通过 subscribe()注册监听器
1、用户操作视图
2、发起一次 dispatch。有异步:返回一个函数(使用 thunk 中间件),没有异步:return {}
3、进入 reducer,通过对应的 type 去修改 state,最后返回一个新的 state
redux 中间件原理
redux 的中间件就是对 store 的 dispatch 做了个升级,升级之后 dispatch 就可以对象和函数都可以接收,
这个时候当调用dispatch 方法给dispatch 方法传递的参数是一个对象的话,那么dispatch就会把这个对象直接传递给 store,跟之前我们写 dispatch 传递给它一个对象没什么区别,
但是如果传递给 dispatch 方法是一个函数的话,这个时候 dispatch 已经升级了,它就不会把这个函数直接传递给 store,它会先让这个函数执行,执行完了之后需要调用 store 的时候再去调用 store。
所以 dispatch 在这里会根据参数的不同执行不同的事情
redux 有什么缺点
一个组件所需要的数据,必须由父组件传过来,而不能像 flux 中直接从 store 取;
当一个组件相关数据更新时,即使父组件不需要用到这个组件,父组件还是会重新 render,可能会有效率影响,或者需要写复杂的 shouldComponentUpdate 进行判断
解释 Reducer 的作用
Reducers 是纯函数,它规定应用程序的状态怎样因响应 ACTION 而改变。
Reducers 通过接受先前的状态和 action 来工作,然后它返回一个新的状态。
它根据操作的类型确定需要执行哪种更新,然后返回新的值。如果不需要完成任务,它会返回原来的状态
Store 在 Redux 中的意义是什么?
Store 是一个 JavaScript 对象,它可以保存程序的状态,并提供一些方法来访问状态、调度操作和注册侦听器。
应用程序的整个状态/对象树保存在单一存储中。
因此,Redux 非常简单且是可预测的。我们可以将中间件传递到 store 处理数据,并记录改变存储状态的各种操作。所有操作都通过 reducer 返回一个新状态
列出 Redux 的组件
Action – 这是一个用来描述发生了什么事情的对象
Reducer – 这是一个确定状态将如何变化的地方
Store – 整个程序的状态/对象树保存在 Store 中
View – 只显示 Store 提供的数据