React-5.2 Redux -- combineReducers优化合并reducer

原始臃肿写法

接上一篇博客Redux 之 状态管理库 – 核心api

当数据过于臃肿时,可以用组件化的方式提出来写,再进行合并

  1. 原始臃肿写法,数据很多时,写法会非常杂,不建议使用。 X X X
    例如:index 的数据要管理、message 的数据要管理、list 的数据要管理
function reducer(state={
  index:{info:"首页的数据"},
  list:{info:"列表的数据"},
  message:{info:"留言页的数据"}
},action){

  switch(action.type){
    case "index_edit_info":
      return{
        ...state,
        index:action.info
      }
      // ...
      // ..
      // .
  }
  return state
}
  1. 当数据过于臃肿时,可以用组件化的方式提出来写,再进行合并。√ √ √

合并写法1

import React from 'react';
import { createStore } from "redux";

// 1. 每个部分分开,先用组件化的方式提出来写
function index(state={info:"首页"},action){
  switch(action.type){
    case "index_edit_info":
      return{
        ...state,
        info:action.info
      }
  }

  return state
}

function list(state={list:"列表",message:"详情"},action){
  switch(action.type){
    case "list_edit_info":
      return{
        ...state,
        list:action.list,
        // message:action.message
      }
    case "message_edit_info":  
      return{
        ...state,
        message:action.message
      }
  }

  return state
}

// 2. 合并到一起
// (1)合并写法一 ---------------------------
function reducer(state={},action){

  return{
    index:index(state.index,action),
    list:list(state.list,action)
  }

}

let store = createStore(reducer);

store.subscribe(()=>{
  console.log(store.getState());
})


store.dispatch({
  type:"index_edit_info",
  info:"啦啦啦"
});
store.dispatch({
  type:"list_edit_info",
  list:"我是一个列表",
  // message:"我是一个列表的详情"
});
store.dispatch({
  type:"message_edit_info",
  message:"我是一个列表的详情"
})



function App() {
  return (
    <div>哈哈</div>
  );
}

export default App;


合并写法2,combineReducers 终极简洁版

使用 combineReducers ,把 reducer 的函数换成下边这种写法,会更加简洁!!!

参数: 传入一个对象,这个对象中的属性,就是要合并的reducer

注意点: 对象的属性名,要和函数名相同

import React from 'react';
import { createStore,combineReducers } from "redux";
...

// (2)合并写法二:终极简洁版 ---------------------------
let reducer = combineReducers({
    index,
    list
});


let store = createStore(reducer);

store.subscribe(()=>{
  console.log(store.getState());
})

...

浏览器输出:(两种合并方式效果都一样)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值