提示:redux的实现原理以及核心代码
提示:以下是本篇文章正文内容
一、为什么要使用Redux?
原因:
在React中,数据在组件中是单项绑定
的,父组件向子组件传递数据可以通过props
,但是兄弟组件之间传递数据就比较麻烦,redux就可以解决这个问题
二、redux的设计理念
redux是将整个应用的state存储在一个公共的store文件中,组件可以通过分发(dispatch)
一个动作或者行为(action)
给这个公用的store,而不是直接去通知其他组件,组件内部通过订阅store中的状态state来刷新自己的视图
三、Redux三大原则
1、唯一数据源
整个应用的数据存储在一个统一的状态树中,也就是我们说的公共的store文件。在组件都会从这个store中获取数据
2、保持只读状态
state状态是只读的,唯一改变state的方法就是触发action,action是一个用于描述发生时间的普通对象
3、数据改变只能通过纯函数来执行
使用纯函数来执行修改,为了描述action如何该百年state的,需要编写reducers
四、Redux原理详解
store
1、store就是保存数据的地方,可以将它看作一个数据,而且整个应用能有一个store
2、redux提供了createStore这个函数,用来生成store
import {createStore} from 'redux'
const store=createStore(fn);
state
1、state就是store中存储的数据,store里可以拥有多个state,Redux规定一个state对应一个View,只要state相同,view就是一样的,反过来也是一样的,可以通过store.getState()获取
import {createStore} from 'redux'
const store=createStore(fn);
const state=store.getState()
Action
1、action可以改变state,而且也是改变state的唯一方法
const action={
type:'ADD_TODO', //action名称,必须存在
payload:'redux'
}
dispatch
1、store.dispatch( )是view发出Action的唯一办法
2、在view中,用户触发一个行为或者简单理解点击某一个按钮,这时候如果需要修改state值,就需要触发action,而store.dispatch接收一个Action作为参数,将它发送给store通知store来改变state。
const action = {
type:'ADD_TODO',
payload:'redux'
};
store.dispatch(action);
reducer
1、Store收到Action以后,必须给出一个新的state,这样view才会发生变化。这种state的计算过程就叫做Reducer。
2、Reducer是一个纯函数,他接收Action和当前state作为参数,返回一个新的state。
const reducer =(state,action)=>{
switch(action.type){
case ADD_TODO:
return newstate;
default return state
}
}
总结
- 将应用的状态统一放到
state
中,由store
来管理state
。 reducer
的作用是返回一个新的state去更新store中对用的state- 按
redux
的原则,UI层每一次状态的改变都应通过action
去触发,action
传入对应的reducer
中,reducer
返回一个新的state
更新store
中存放的state
,这样就完成了一次状态的更新 subscribe
是为store
订阅监听函数,这些订阅后的监听函数是在每一次dipatch
发起后依次执行- 可以添加中间件对提交的
dispatch
进行重写