当前位置: 首页 > 科技观察

谈谈你对Redux的理解?怎么运行的?

时间:2023-03-19 22:07:24 科技观察

1.什么是反应?它用于构建用户界面,帮助我们解决渲染DOM的过程。整个应用中会有很多组件。每个组件的状态都是自己管理的,包括组件定义本身的状态,组件之间的通信是通过props传递的,使用Context实现数据共享。如果每个组件都存储自己的相关状态,理论上来说不会影响应用的运行,但是在开发和后续维护阶段,我们会花费大量的精力去查询状态变化过程,在这种情况下,如果所有的状态集中管理,当需要更新状态时,只需集中处理管理即可,无需关心状态如何分布到各个组件。redux是一个实现上述集中管理的容器,遵循三个基本原则:单一数据源状态是只读的使用纯函数进行修改注意redux不仅用在react中,还可以和其他接口库一起使用,比如Vue2.工作原理Redux要求我们把所有的数据都放在store的公共存储空间中。当一个组件改变store中的数据内容时,其他组件可以感知到store的变化,进而获取数据,从而间接实现了这些数据传输的功能。工作流程图如下:根据流程图可以想象,ReactComponents是借书的用户,ActionCreactor是借书时说的话(借什么书),Store是图书管理员,还有Reducer就是记录本(借什么书)。book,还什么书,where,needtocheck),state就是图书信息,整个过程就是需要借书的用户先存在,然后需要借书,需要一句话来描述借什么书。图书管理员听到后,你需要查看记录簿才能知道这本书的位置。最后,图书管理员会将书交给借书人,并将其转化为代码。ReactComponents需要获取一些数据,然后它告诉Store它需要获取数据。这是ActionCreactor,Store收到后,去Reducer中查看,Reducer会告诉Store应该给这个组件什么数据。3.如何使用创建店铺的公共数据区。conststore=createStore()//创建数据的公共存储区(管理员)还需要创建一个记录本来辅助管理数据,即reduecer,本质上是一个函数,接收两个参数state,action,returnstate//设置默认值constinitialState={counter:0}construducer=(state=initialState,action)=>{}然后将记录本传给store,两者建立连接。如下:conststore=createStore(reducer)如果要获取store中的数据,使用store.getState()获取当前状态console.log(store.getState());下面看看如何改变store中的数据,通过dispatch来dispatchaction,通常action中会有一个type属性,也可以携带其他数据store.dispatch({type:"INCREMENT"})store。dispath({type:"DECREMENT"})store.dispatch({type:"ADD_NUMBER",number:5})我们来看看修改reducer中的处理逻辑:construducer=(state=initialState,action)=>{switch(action.type){case"INCREMENT":return{...state,counter:state.counter+1};case"DECREMENT":return{...state,counter:state.counter-1};case"ADD_NUMBER":return{...state,counter:state.counter+action.number}default:returnstate;}}注意reducer是一个纯函数,不需要直接修改state。dispatchaction之后,可以通过store.subscribe监听store的变化,如下:store.subscribe(()=>{console.log(store.getState());})在React项目中,会与react-redux一起使用。完整代码如下:constredux=require('redux');constinitialState={counter:0}//创建reducerconstruducer=(state=initialState,action)=>{switch(action.type){case"INCREMENT":return{...state,counter:state.counter+1};case"DECREMENT":return{...state,counter:state.counter-1};case"ADD_NUMBER":return{...state,counter:state.counter+action.number}default:returnstate;}}//根据reducer创建storeconststore=redux.createStore(reducer);store.subscribe(()=>{console.log(store.getState());})//修改statestore.dispatch中的store({type:"INCREMENT"})//console.log(store.getState());store.dispatch({type:"DECREMENT"})//console.log(store.getState());store.dispatch({type:"ADD_NUMBER",number:5})//console.log(store.getState());总结createStore可以帮助创建storestore.dispatch帮助dispatchaction,action会传递给storestore.getState这个方法可以帮助获取store里面所有数据内容的store.subscrible方法订阅store的变化。只要store发生变化,就会执行store.subscrible函数接收到的回调函数。参考资料https://cn.redux.js.org/docs/in介绍/https://www.redux.org.cn/docs/basics/Actions.htmlhttps://lulujianglab.com/posts/大白话解析Redux、redux-thunk、redux-saga和react-redux