redux是严格的单项数据流
1.Action 是把数据从应用传到store的有效载荷,它是store数据的唯一来源,一般通过store.dispatch()将action传到store
Action本质是js对象,action内必须使用一个字符串类型的type字段表示将要执行的动作,多数情况下,type会被定义成字符串常量。当应用规模越来越大时,建议使用单独文件来存放type
2.reducer
reducer是一个纯函数,接受旧的state和action,返回新的state
纯函数:只要传入参数相同,返回计算得到的下一个state一定相同,没有特殊情况,没有副作用,没有api请求,没有变量修改,单纯执行计算
3.Redux store
store能维持应用的state,并在当你发起action的时候调用reducer。
store的职责:
1.提供getState()方法获取state
2.提供dispatch(action)方法更新state
3.通过subscribe(listener)注册监听器
4.通过subscribe(listener)返回的函数注销监听器
4.Redux生命周期
1.调用store.dispatch(action)
action 是一个描述发生了什么的普通对象,{type:'LIKE_ARTICLE',articleId:42}
可以把action理解成新闻的摘要,可以在任何地方调用store.dispatch(action),包括组件中,XHR回调中,甚至定时器中。
2.Redux store调用传入的reducer函数
store会把两个参数传入reducer:当前的state树和action
3.根reducer应该把多个子reducer输出合并成一个单一的state树
4.Redux store保存了根reducer返回的完整state树,这个新的树就是应用的下一个state,所有订阅store.subscribe(listener)的监听器都将被调用,监听器里可以调用store.getState()获得当前state
react-redux 和 redux 的配合使用
smart/container components 容器组件
描述如何运行,数据获取,状态更新
直接使用redux
数据来源:监听redux state
数据修改:向redux派发actions
调用方式:通常由react redux生成
dumb/presentatinal 展示组件
描述如何展现 骨架,样式
不直接使用redux
数据来源:props
数据修改:从props调用回调函数
调用方式:手动
使用connect
定义mapStateToProps()这个函数来指定如何把当前redux store state映射到展示组件的props中。
定义mapDispatchToProps(),接收dispatch()方法并返回期望注入到展示组件的props中的回调方法
从react-redux中引入connect()并传入这两个函数
使用react-redux组件<Provider>可以让所有容器组件都能访问store,而不必显式地传递它。只需要在渲染根组件时时使用即可