Redux 初见
Redux初见本文记录的是自己对redux的学习和理解,希望可以简洁易懂,入门 Redux是什么
核心概念
Redux常用方法createStore(reducer,[initialState])创建一个Redux combineReducers(reducers)随着应用复杂度上升,数据源逐渐变混乱,导致组件内部数据调用十分复杂,会产生数据冗余或者混用等情况,需要对 const module1Reducer = combineReducers( module1_key1: module1_reducer1 ); const rootReducer = combineReducers( key1: reducer1,module1: module1Reducer ); const store = createStore(rootReducer); // store中保存的state结构如下 { key1: reducer1(state.key1,action),module1: { module1_key1: (state.module1.module1_key1,action) } } 总结一下, + data - 服务器响应的数据 - 缓存数据 - 本地尚未持久化到服务器的数据 - 用户输入 - ... + ui状态 - 激活的路由 - 被选中的Tab标签 - 是否显示加载动画 - 分页器状态 - ... 设计 applyMiddleware(...middlewares)首先要介绍一下什么是
function applyMiddleware(store,middlewares) { middlewares = middlewares.slice() middlewares.reverse() // 暂存dispatch let dispatch = store.dispatch // 包装dispatch middlewares.forEach(middleware => dispatch = middleware(store)(dispatch) ) return {...store,{ dispatch }) } 理解了 function(store){ // pass store.dispatch to next return function(next){ // return dispatch return function(action){ // implement middleware logic } } } bindActionCreators(actionCreators,dispatch)
compose(...functions)组合store enhance,applyMiddleware 和 redux-devtools就是store enhance React-redux桥接
provider为整个应用提供 connect([mapStateToProps],[mapDispatchToProps],[mergeProps],[options])connect(...args)(component)返回一个与 mapStateToProps(state,[ownProps]) [Function]
mapDispatchToProps(dispatch,[ownProps]) [Object or Function]
// action creator返回对象 mapDispatchToProps = { // action creator checkout: function actionCreator(productId){ return { type: types.ADD_TO_CART,productId } } } // action creator返回函数,thunk mapDispatchToProps = { // action creator checkout: function actionCreator(productId){ action creator 返回一个thunk, thunk的参数为 dispatch 和 getState return (dispatch,getState) => {? if (getState().products.byId[productId].inventory > 0) {? dispatch(addToCartUnsafe(productId))? }? } } } // 最终被绑定的组件props component.props.checkout = function () { return dispatch(actionCreator.apply(undefined,arguments)); }
mapDispatchToProps(dispatch,[ownProps]) = function(){ return { checkout: () => {? dispatch(actionCreator())? } } } // 最终被绑定的组件.props component.props.checkout = function () { return dispatch(actionCreator.apply(undefined,arguments)); } // 使用bindActionCreators mapDispatchToProps(dispatch,[ownProps]) = function(){ return bindActionCreators(actionCreator,dispatch) } // 最终被绑定的组件props component.props.actionCreator = function () { return dispatch(actionCreator.apply(undefined,arguments)); } // 使用 bindActionCreators mapDispatchToProps(dispatch,[ownProps]) = function(){ return bindActionCreators({ ‘checkout’: actionCreator },dispatch) } // 最终被绑定的组件props component.props.checkout = function () { return dispatch(actionCreator.apply(undefined,arguments)); } 使用redux之后应用的数据流向dispatch(actionCreator)=> Reducer => (state,action) => state
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |