| ### 1.action creators |
|
| 作用:统一管理所有的Actions |
|
| ```js |
| //action creator |
| export let actions = { |
| changeName: (name) => { |
| return |
| }, |
| changeAge: (age) => ({ type: TYPES.CHANGE_AGE, age: age }), |
| changeSex: sex => ({ type: TYPES.CHANGE_SEX, sex: sex }) |
| } |
|
| ``` |
|
|
|
| ### 2.action types |
|
| 作用:统一管理所有的types |
|
| ```jsx |
| //action types |
| const TYPES = { |
| CHANGE_NAME: "CHANGE_NAME", |
| CHANGE_AGE: "CHANGE_AGE", |
| CHANGE_SEX: "CHANGE_S" |
| } |
| ``` |
|
|
|
| ### 3.reducer拆分 |
|
| 作用:reducer进行拆分,这样便于后期扩展和维护 |
|
| Eg:order.js模块 |
|
| ```js |
| //初始值 |
| const initState={ |
| list:[] |
| } |
|
| //action types |
| const TYPES={ |
| CHANGE_LIST:"CHANGE_ORDER_LIST" |
| } |
|
| //reducer |
| const reducer=(state=initState,action)=>{ |
| switch(action.type){ |
| //{type:"changeList",arr:[{}, |
| case TYPES.CHANGE_LIST: |
| return { |
| ...state, |
| list:action.arr |
| } |
| default: |
| return state; |
| } |
| } |
| // action creator |
| export let actions={ |
| changeList:arr=>{ |
| return |
| } |
| } |
| export default reducer |
| ``` |
|
| Shop.js |
|
| ```js |
| //初始值 |
| const initState={ |
| list:[] |
| } |
|
| //action types |
| const TYPES={ |
| CHANGE_LIST:"CHANGE_SHOP_LIST" |
| } |
|
| //reducer |
| const reducer=(state=initState,action)=>{ |
| switch(action.type){ |
| //{type:"changeList",arr:[{}, |
| case TYPES.CHANGE_LIST: |
| return { |
| ...state, |
| list:action.arr |
| } |
| default: |
| return state; |
| } |
| } |
| // action creator |
| export let actions={ |
| changeList:arr=>{ |
| return |
| } |
| } |
| export default reducer |
| ``` |
|
| 通过combineReducers 合并reducer . [src/store/index.js] |
|
| ```js |
| import { createStore,combineReducers } from "redux" |
| //引入模块 |
| import order from "./modules/order" |
| import shop from "./modules/shop" |
| import user from "./modules/user" |
|
| // 合并reducer |
| let rootReducer=combineReducers({ |
| // 模块名:模块对应的reducer |
| order:order, |
| shop, |
| user |
| }) |
|
| //创建仓库 |
| let store = createStore(rootReducer) |
|
|
| //导出仓库 |
| export default store |
| ``` |
|
|
|
| ### 4.redux devTools调试工具 |
|
|
|
| # 2.react-redux |
|
|
|
| ### 容器型组件VS展示型组件 |
|
|
|
|
|
|
|
|
|
| # 3.redux高阶 |
|
| ### 1.bindActionCreators |
|
| 组件想要所有的actions上的方法进行dispatch |
|
| ```js |
| import { actions } from "../store"; |
| import { bindActionCreators } from "redux"; |
| ``` |
|
| ```js |
| const mapDispatchToProos = (dispatch) => { |
| //通过bindActionCreators 将actions上的方法统统导入到fn |
| return { |
| fn: bindActionCreators(actions, dispatch), |
| // changeName:(name)=>dispatch(actions.changeName(name )) |
| }; |
| }; |
| ``` |
|
|
|
| ### 2.selectors |
|
| ### 3.reselect |
|
| ### 4.redux middleware |
|
| # |