首页 > 其他分享 >redux模块拆分——start状态模块化——connect高阶函数模块化——Action函数返回对象模块化

redux模块拆分——start状态模块化——connect高阶函数模块化——Action函数返回对象模块化

时间:2022-10-02 22:10:26浏览次数:40  
标签:const 函数 模块化 reducer add dispatch start state redux


redux模块拆分

使用redux库中提供的​​combineReducers​​方法,可以将多个拆分reducer函数合并成统一的reducer函数,返回一个新reducer,提供给createStore来使用。

import { combineReducers } from 'redux'
import admin from './reducer/admin'
import web from './reducer/web'

const reducer = combineReducers({
numadd,
web
})

如何去拆分

把数据状态源state和reducer拆分出去
路径:./count/numadd.js

const initState = {
num:100
}

const reducer = (state=initState,action)=>{
// console.log(action);
if(action.type === "add"){
return {...state,num:state.num+action.payload}
}
return state
}
export default

如何去合并

如果你进行了redux模块化拆分,则需要注意 type的类型名称不能重名,如果重名则都会执行

const reducer = combineReducers({
key:value
key:它是在获取state数据时的命名空间名称,redux中没有dispatch操作的命名空间名称
type类型: 拆分后的文件名称为前缀 xxx_type类型名 不会重名
value 拆分后的reducr纯函数
})

例如:

import numadd from './count/numadd'
let reducer = combineReducers({
numadd
})
****

如何去使用拆分后的模块呢1?

通过这个模块化拆分后发现,数据状态会分成了好几个对象,那个数据需要,就return哪个模块的key值,这样就可以在组件中通过this.props取值,而dispatch方法不会影响,注意type值不能取成一样的

const mapStateToProps = state => {
console.log(state);//{numadd: {…}}
console.log(state.numadd);//{num: 100}
return state.numadd
// return { num: state.num }
}

const mapDispatchToProps = dispatch =>{
return {
add(n=1){
setTimeout(()=>{
dispatch({type:"add",payload:n})
},1000)
}
}
}
***********************************************

import { connect } from 'react-redux'
@connect(mapStateToProps, mapDispatchToProps)
class App extends Component {

<h1>App组件{this.props.num}</h1>

<button onClick={()=>{
this.props.add(4)
}}>rdeux操作++</button>
}

针对这种react-redux繁琐的在组件中书写,也可以进行拆分:

那其实我们发现;在前面部分只是一个固定的高阶函数
这样的话,还不如再次把这些固定的函数,以及所需要传入的对象给封装成一个文件,导出函数,在使用通过修饰符@来调用高阶组件。

redux模块拆分——start状态模块化——connect高阶函数模块化——Action函数返回对象模块化_高阶函数


模块化高阶函数

import { connect } from 'react-redux'
const mapStateToProps = state => {
return state.numadd
}
const mapDispatchToProps = dispatch =>{
return {
add(n=1){
dispatch({type:"add",payload:n}
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)

再次通过装饰器调用高阶函数:
从而达到封装的效果。

import conncet from './store/count/conncet';
@conncet
class App extends Component {}

对于在这的mapDispatchToProps返回值为对象,对象里面是key、value的函数,那这个函数其实我们如果对同一个状态的数据进行操作,不仅仅有一种方法,可能是多个,咱们就可以把它们专门提取出来作为一个函数,执行时返回一个对象。

export default (dispatch)=>({
add(n=1){
dispatch({type:"add",payload:n})
}
})

这样写就可以添加多个函数返回值。

import countAction from './countAction.js';
const mapDispatchToProps = dispatch =>{
return {
...countAction(dispatch)
}
}

使用中间件完成对中间action的拦截和放行

利用applyMiddleware来完成中间件

import { createStore ,combineReducers,applyMiddleware} from "redux";
const logger = store =>next =>action =>{
console.log("action___",action);
next(action)
}


store = createStore(reducer,composeWithDevTools(applyMiddleware(logger)))

export default

或者利用redux的中间件

yarn add redux-logger
import logger from "redux-logger"

store = createStore(reducer,composeWithDevTools(applyMiddleware(logger)))

redux模块拆分——start状态模块化——connect高阶函数模块化——Action函数返回对象模块化_数据_02


标签:const,函数,模块化,reducer,add,dispatch,start,state,redux
From: https://blog.51cto.com/u_15808854/5729460

相关文章

  • 关于对象内函数定义的一种方式——中括号
    我们可以知道在函数内部有关于当key值和value值可以用一种写法来代替,也可以通过对象中括号的方式对属性值得获取,但是呢,如果value是一个函数,那他还有一一种写法:letobj={......
  • Hive 时间相关函数汇总
    Hive时间相关函数汇总文章目录​​Hive时间相关函数汇总​​​​时间转换​​​​**from_unixtime/unix_timestamp**​​​​日期格式相互转换​​​​时间戳转日期格式​......
  • Scala:函数基本概念
    函数//无输入函数def<identifier>=<expression>defhi="hi"//无输入指定返回类型函数def<identifier>:<type>=<expression>defhi:String="hi"//完整函数def......
  • T4 凹函数 整理
    MD凹函数题解题意是多组数据,给定\(n,m\),求定义域和值域分别为\([0,n],[0,m]\)的单调凹函数至多经过几个整点考虑相邻两个经过整点的差,原问题等价于选出k个二维向量\((......
  • 找出完全相同的行-函数
    问题:找出两个表中完全相同的行函数解决:{=FILTER(A2:C6,MMULT((A2:C6=E2:G6)*1,{1;1;1})=3)}MMult函数计算规则: 最后利用Filter函数筛选出MMult函数结果为3的行......
  • c/c++ 时间函数
    c语言相关函数#include<stdio.h>#include<time.h>voidtime_test_func(){time_tseconds;seconds=time(NULL);printf("从1970-01-0100:00:00到......
  • 从IDA实战看函数参数和局部变量在栈里分布的差异
    问题:IDAPro识别了在0x10001656处的子过程(函数)中的多少个局部变量? 当前版本的IDA,识别的是一个参数lpThreadParameter,以及62个参数局部参数通常以var_开头,偏移值为负值,......
  • Mysql function 自定义函数,查找子节点
    ThisfunctionhasnoneofDETERMINISTIC,NOSQL,orREADSSQLDATAinitsdeclarationandbinaryloggingisenabled(you*might*wanttousethelesssafelog_......
  • 函数学习
    1.函数分为:库函数和自定义函数查找库函数的网站:http://www.cplusplus.com   或着​​https://legacy.cplusplus.com/reference/​​中文版的C语言函数网站:cpprefenrer......
  • React18 (六) hook钩子函数
    React中的钩子函数的功能非常的强大,而它的使用又十分简单。关于钩子函数的使用,我们只需记住两点:1.钩子只能在React组件和自定义钩子中使用2.钩子不能在嵌套函数或其他......