Redux中 combineReducers的使用

简介: Redux中 combineReducers的使用

什么时候去使用combineReducers?

如果不同的action所处理的属性之间没有联系,我们可以把Reducer函数拆分。

不同的函数负责处理不同的属性,最终把他们合并成一个大的Reducer即可,这就是combineReducers。

配置思路

  • 首先安装redux的依赖包
  • 创建store/index.js中,配置项目支持redux的使用
  • 导入redux纯函数,state数据,actions代表方法,返回操作后的state对象,合并的方式返回{...state,修改对象}
  • createStore调用reducers作为参数创建store对象
  • store抛出,使用的页面import导入即可,这个就是redux使用
  • store.getState()获取数据         store.dispatch()调用action的方法即可

附页:目录表

分别新添了cart.js文件以及user.js文件

711a1717fce24c9985c88b632071577d.png

user.js即:

// 1.导入createStore方法
import { createStore } from "redux";
// 2.创建一个reducer纯函数的方法,state初始化数据,actions修改数据的行为
const reducer=function (state,actions){
    //定义初始化的数据
    if(!state){
        state={
            count:10,
            list:[
                {name:"小欣欣",age:20},
                {name:"小张张",age:21},
            ]
        }
    }
    //定义actions的逻辑代码区域,处理逻辑的信息
    switch(actions.type){
        //调用执行+1的逻辑
        case "PLUS":
            return{
                ...state,
                // count:state.count+1,
                count:state.count+actions.payload,
            }
        case "MIN":
            return{
                ...state,
                count:state.count-1
            }
        //添加列表
        case "ADD":
            state.list.push(actions.payload)
            return{
                ...state,
                list:state.list
            }
            break
        default:{
            return{
                ...state
            }
        }
    }
}
//3.创建一个store的对象
const store=createStore(reducer)
// 4.抛出store的对象值
export default reducer;

cart.js即:

export default function(state,actions){
    if(!state){
        state={
            num:100
        }
    }
    switch(actions.type){
        default:
            return state;
            break
    }
}

index.js即:(index.js文件分别引入我们的user.js以及cart.js)

cart.js和user.js分别写的是我们的数据操作简单来说就是判断逻辑

// 1.导入createStore方法
import { combineReducers, createStore } from "redux";
import cart from "./cart";
import user from "./user"
// 2.创建一个reducer纯函数的方法,state初始化数据,actions修改数据的行为
const reducer=combineReducers({
    user,
    cart
})
//3.创建一个store的对象
const store=createStore(reducer)
// 4.抛出store的对象值
export {store};

Home.jsx即:

import React from 'react'
import {store} from "../../store"//引入我们的store文件夹
import { useRef } from 'react'
export default function Home(props) {
    // 获取redux数据
    let state=store.getState()
    console.log(state);
    let {count,list}=state.user
    console.log(count,list);
    let nameinp=useRef(null)
    let ageinp=useRef(null)
    // console.log(count);
    const add=()=>{
        console.log(nameinp.current.value,ageinp.current.value);
        // 提交到redux中去
        store.dispatch({type:"ADD",payload:{name:nameinp.current.value,age:ageinp.current.value}})
    }
    return (
        <div>
            {/* <h3>
                主页面
                Redux:{count}
            </h3>
            <button onClick={()=>{store.dispatch({type:"PLUS",payload:2})}}>count++</button>
            <button onClick={()=>{store.dispatch({type:"MIN"})}}>count-1</button> */}
            <hr/>
            <div>
                <input type="text" ref={nameinp} placeholder='请输入姓名'/><br/>
                <input type="text" ref={ageinp} placeholder='请输入年龄'/><br/>
                <button onClick={add}>添加</button>
            </div>
            <ul>
                {list.map((item,index)=>{
                    return(
                        <li key={index}>{item.name}--{item.age}</li>
                    )
                })}
            </ul>
        </div>
    )
}

这边有一个需要特别注意的点即:

c70da0cbfea8444b810873afb7ca882f.png

它是不可以直接去使用,访问的时候会报undefined的错误

a2772ebab38649bdb6d3157ef44b5c32.png

我是一个小趴菜,希望可以对和我一样的新手小白有帮助🤭


相关文章
|
JavaScript 前端开发 中间件
useReducer+createContext真的可以代替Redux吗?
useReducer+createContext真的可以代替Redux吗?
166 0
|
4月前
|
JavaScript 前端开发 中间件
像Vuex一样使用redux
【8月更文挑战第16天】像Vuex一样使用redux
31 2
像Vuex一样使用redux
|
4月前
|
存储 JavaScript 前端开发
什么是 Redux?
【8月更文挑战第30天】
54 0
|
7月前
|
存储 JavaScript 前端开发
了解 redux 么,说一下 redux 吧
了解 redux 么,说一下 redux 吧
64 0
|
存储 JavaScript 前端开发
什么是Redux?
什么是Redux?
|
JavaScript 中间件
React-Redux-thunk
React-Redux-thunk
48 0
|
存储 JavaScript 中间件
React-Redux-Saga
React-Redux-Saga
30 0
|
JavaScript 前端开发 中间件
说说你对Redux的理解?和react-redux有什么区别?
说说你对Redux的理解?和react-redux有什么区别?
|
JavaScript 前端开发
什么是redux?如何在react 项目中使用redux?
什么是redux?如何在react 项目中使用redux?
107 0
|
存储 JavaScript 前端开发
MobX or Redux ? #81
MobX or Redux ? #81
89 0