React中详解redux

React中详解redux

redux

redux严格按照flux思想实现的一套框架,实现了单一数据流向。

组成部分

redux由四部分组成

action 组件发布的消息

store 存储消息的

reducers 捕获action,处理数据的方法

view 组件视图了

通信流程

一个组件发布action

action通过store被reducers捕获

reducers根据消息的类型处理数据

reducers将新的数据存储在store中

store将更新的数据传递给​​另一个组件​​了

注意:通信过程中,数据是作为state来存储了。

redux三大原则

单一数据源

整个应用中有且只能有一个store对象。

state是只读的

整个应用中的数据state是只读的,我们不能修改。我们可以通过getState方法获取state,但是不论是在组件中,还是在reducer中,我们不能直接修改state,在组件中,我们要发布action来修改state。

函数式编程

redux为了让我们开发更简单,建议我们采用函数式编程,也就是说每一个reducer都是一个函数,在函数中,我们更新state数据

React中详解redux

体验redux

redux在设计之初,并不只是针对于react来设计了,希望能够在各个框架中使用,因此核心模块被抽象成可以公用的了,向在其他框架中使用,我们要安装相应的插件。

redux要在es6开发中使用,因此我们要安装该模块

npm install redux

redux模块提供了一些方法,供我们使用

React中详解redux

redux方法

createStore 用来创建store的

参数是reducers方法

返回值是store对象

作用:存储应用程序的state数据

combineReducers 合并多个reducers

例如:使用路由的时候,可以通过该方法,合并路由的reducers

applyMiddleware 添加中间件

例如:在异步action中,添加中间件。

action

action就是一个消息对象,用来定义消息类型,和消息数据

通常用type表示消息类型(类型通常是不变,所以工作中要定义成常量)

数据部分属性名称没有限制,可以是任意的,例如data等等

reducers

用来接收action并处理的,类似观察者模式中的on方法,或者vuex中的mutations。

在redux中,被设计成一个函数

第一个参数表示state对象

第二个参数表示action对象

必须有返回值,就是更新的state数据

注意:如果state是引用类型的数据,一定要先复制再返回。

就是说要返回一个新的state对象。

当我们在创建store的时候,为了让state有默认值,会默认执行一次reducer,因此我们可以为state定义默认值并返回

store对象

dispatch 用来发布消息的(相当于观察者模式中trigger方法)

getState 获取state数据

replaceReducer 替代reducer

subscribe 监听state变化的

symbol symbol对象

React中详解redux

举例:

// 引入redux
import { createStore } from 'redux';
// console.log(Redux);
// 消息名称定义成常量
const ADD = 'add';
const REMOVE = 'remove';
// 定义消息
let addNum = { type: ADD, num: 10 }
let removeNum = { type: REMOVE, num: 5 }
// 定义reduer
function reducer(state = 0, action) {
// console.log('reducer', state, action);
// 分析aciton类型
switch (action.type) {
case ADD:
// 值类型数据,可以直接修改
state += action.num;
break;
case REMOVE:
// 处理减少数字的消息
state -= action.num;
break;
}
// 必须有返回值,就是新的state
return state;
}
// 创建store, 传递reducer
let store = createStore(reducer);
// 查看store
console.log(store)
// 监听state变化, 一定要在执行之前监听
store.subscribe(res => console.log(store.getState()))
// 解构方法
let { dispatch } = store;
// 发布action
// store.dispatch(addNum)
dispatch(addNum)
dispatch(addNum)
dispatch(addNum)
dispatch(removeNum)

文章版权声明

 1 原创文章作者:2507,如若转载,请注明出处: https://www.52hwl.com/36893.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年7月15日 上午9:01
下一篇 2023年7月15日 上午9:02