redux的学习笔记首先,我们来了解一下什么是MVC框架MVC框架(Model-View-Controller)视图(View):用户界面。=>发送指令给ControllerController(控制器):业务逻辑=>完成业务逻辑后,要求Model改变状态Model(模型):DataSave=>发送新数据给View,用户得到反馈帮助一个小故事懂故事的主人公小明打拼多年,终于攒够了买房的钱,于是在京城郊区买了一套120的毛坯房(现在房子的状态).因为是毛坯房,自然是因为一些基础设施,没有别的(initState),所以问题就来了。我不能住在这个未完工的房子里。刚买房,积蓄不多,想找装修公司简化一下,问了下。报完价,小明直接根据在幼儿园打下的美术基础画了一张设计图,然后和老婆布置任务,谁该做什么,比如小明刷墙。经过多日的努力,装修终于完成了。是的,此时小明的新房已经从毛坯房变成了豪华毛坯房(更新后的房子状态)1.先回顾一下这个故事:小明的毛坯房-->画装修图-->小明分配任务-->小明夫妇装修-->豪华毛坯房2.说说Redux中的几个核心概念,这里还要加上React:view(React)store(state)actionreducer3。接下来看Redux/React和这个故事的联系:view(React)=第一次看到毛坯房store(state)=毛坯房是空的,什么都没有,只有基础设施action=小明分配任务(whoshoulddowhat)reducer=具体要做哪些任务(小明画墙)4.所以这个过程应该是这样的view--->action--->reducer--->store(state)--->查看5。如果放在一个webapp中,首先store(state)决定了view,然后用户和view的交互会产生actions,会触发reducer改变state,然后state的改变会引起观点的改变。redux源码简单分析redux中的主要方法:createStorecombineReducersbindActionCreatorsapplyMiddleWarecompose这里主要分析createStore(reducer)的原函数有3个参数,这里只分析第一个参数reducer参数:reducerreducer:函数类型(而且是纯函数),reducer的作用是,根据指定action的类型,处理state并返回一个新的state参数:action:是一个对象或函数(最终返回的也是一个对象),type是action的一个属性必须有,reducer根据action.type处理状态state:需要在此处初始化状态,否则会报错,因为reducer的合并状态被覆盖了,所以需要解构当前状态首先,然后处理store的返回值:返回值是三个方法dispatch:dispatchaction,只使用dispatch修改storestate是基于actionqueryreducer中改变状态的方法,更新后storetree和改变storetree,依次执行listener中的所有响应函数getState:获取仓库中的当前状态subscribe:注册监听函数,监听状态的变化。store可以理解为一个全局变量,保存你项目中所有需要保存的数据,并且这个全局变量有密码锁,只能修改指定的密码(dispatch({type:AAA})),因为如果你认为,任何人都可以修改这个全局变量,而在你使用这个变量之前,其他可能执行的程序已经修改了这个变量。这就是为什么我们平时开发的时候要避免使用全局变量,所以一定要增加修改这个数据的权限。让createStore=(reducer)=>{varstate;让听众=[];//创建数组并保存监听函数letgetState=()=>state;//获取仓库中的当前状态functiondispatch(action){//只有调用dispatch方法才能更新仓库state=reducer(state,action);//合并状态listeners.forEach(listener=>listener());//执行监听函数并更新视图}letsubscribe=(listener)=>{listeners.push(listener);//添加监听函数}dispatch({})//由于每次dispatch执行完redux都会执行reducer//所以这一行的作用是初始化storetree中所有的state节点。return{getState,dispatch,subscribe}}返回
