redux

纯函数

函数式编程中有一个概念叫纯函数,JS符合函数式编程的范式,所有也有纯函数的概念。

确定的输入,一定会产生确定的输出;
函数在执行过程中,不能产生副作用;

Redux的核心理念-store

Redux的核心理念-action

Redux要求通过action来更新数据;
所以数据的变化,必须通过派发(dispath)action来更新;
action是一个普通的JS对象,用来描述这次更新的type和content;

强制action的好处是可以清晰地知道数据到底发生了什么样的变化,所有的数据变化都是可追踪、可预测的;

Redux的核心理念-reducer

将state和action联系在一起;
reducer是一个纯函数;
将传入的state和action结合起来生成一个新的state;

Redux的三大原则

单一数据源

整个应用程序的state被存储在一颗object tree中,并且这个object tree只存储在一个store中;

state是只读的

唯一修改state的方法是触发action,确保了view或网络请求都不能直接修改state;
这样保证所有的修改都被集中化处理,并且严格按照顺序来执行;

使用纯函数来执行

通过reducer将旧state和actions联系在一起,并且返回一个新的state;
可以将reducer拆分成多个小的reducers,分别操作不同state tree的一部分;

redux单独使用案例

在这里插入图片描述
store->index.js

import redux from 'redux';
import reducer from './reducer.js'

const store = redux.createStore(reducer);

export default store;

store->constants.js

export const ADD_NUMBER="ADD_NUMBER";
export const SUB_NUMBER = "SUB_NUMBER";

store->actionCreators.js

import { ADD_NUMBER, SUB_NUMBER } from "./constants.js";

/* export function addAction(num) {
  return {
    type: "ADD_NUMBER",
    num,
  };
} */

/* export const addAction = (num)=>{
	return {
    type: "ADD_NUMBER",
    num,
  };
} */

export const addAction = (num) => ({
  type: ADD_NUMBER,
  num,
});

export const subAction = (num) => ({
  type: SUB_NUMBER,
  num,
});

store->reducer.js

import { ADD_NUMBER, SUB_NUMBER } from "./constants.js";

const defaultState={
	counter:0
}

function reducer(state = defaultState, action) {
  switch (action.type) {
    case ADD_NUMBER:
      return { ...state, counter: state.counter + action.num };
    case SUB_NUMBER:
      return { ...state, counter: state.counter - action.num };
    default:
      return state;
  }
}

export default reducer;

index.js

import store from './store/index.js';
import {
	addAction,
	subAction
} from './store/actionCreators.js';

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

store.dispatch(addAction(10));
store.dispatch(subAction(5));

redux使用流程

1.全局通常只有一个Store,存储我们的State;
2.Component中在某些情况会派发Action(这些Action是我们提前定义好的);
3.Reducer会接收到这些Action,并且在Reducer中会返回一个新的State,作为Store的State;
4.State发生更新之后会触发通知,告知订阅者数据发生了改变;
5.订阅者拿到最新的数据(在props中),更新到jsx中,界面发生改变;
在这里插入图片描述

React中的state如何管理

UI相关的组件内部可以维护的状体,在组件内部自己来维护;
大部分需要共享的状态,都交给redux来管理和维护;
从服务器请求的数据(包括请求的操作),交给redux来维护;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值