React@16.x(53)Redux@4.x(2)- action

1,特点

是一个平面对象(plain-object)。换句话说,就是通过字面量创建的对象,它的 __proto__ 指向 Object.prototype

该对象有2个属性:

const action = {
	type: 'add',
	payload: 3
}

1.1,payload

表示额外需要传递的附加数据。

只是约定俗成用该属性,不做强制要求。

1.2,type

1,必须type 属性,用于描述操作的类型,但没有对 type 值的类型做限制。

2,在大型项目中,由于操作类型比较多,为了避免硬编码,会将 actiontype 放到一个单独的文件中。

3,为了方便传递 action,通常会使用一个纯函数来创建它。该函数被称为 action creator

纯函数:

  • 不能改变参数。
  • 没有异步。
  • 不对外部环境中的数据有影响。

举例:

// actionTypes.js
export const ADD = Symbol("add");
export const SET = Symbol("set");
// action.js
import { ADD, SET } from "./actionTypes";

export function getAddAction() {
    return {
        type: ADD,
    };
}

export function getSetAction(newValue) {
    return {
        type: SET,
        payload: newValue,
    };
}
import { createStore } from "redux";
import { ADD, SET } from "./actionTypes";
import * as numberAction from "./action";

function reducer(state, action) {
    if (action.type === ADD) {
        return state + 1;
    } else if (action.type === SET) {
        return action.payload;
    }
    return state;
}

const store = createStore(reducer, 10);
store.dispatch(numberAction.getAddAction());
console.log(store.getState()); // 11
store.dispatch(numberAction.getSetAction(3));
console.log(store.getState()); // 3

1.3,bindActionCreators

为了更方便的利用 action creator 来分发 actionredux 提供了 bindActionCreators

它可以创建 action 后自动完成分发。

  • 第1个参数,action creator 的集合。
  • 返回值,一个新的对象,和第1个参数的属性名一致。
import { createStore, bindActionCreators } from "redux";
import * as numberAction from "./action";

// ...

const store = createStore(reducer, 10);
const bindActions = bindActionCreators(numberAction, store.dispatch);

// store.dispatch(numberAction.getAddAction());
bindActions.getAddAction();
// store.dispatch(numberAction.getSetAction(3));
bindActions.getSetAction(3);

下篇文章 Redux-reducer介绍

以上。

相关推荐

  1. React@16.x53Redux@4.x2)- action

    2024-07-11 14:40:05       10 阅读
  2. React@16.x54Redux@4.x(3)- reducer

    2024-07-11 14:40:05       10 阅读
  3. React@16.x55Redux@4.x4)- store

    2024-07-11 14:40:05       10 阅读
  4. React@16.x52Redux@4.x(1)- 核心概念

    2024-07-11 14:40:05       10 阅读
  5. React@16.x56Redux@4.x(5)- 实现 createStore

    2024-07-11 14:40:05       7 阅读
  6. React@16.x58Redux@4.x(7)- 实现 combineReducers

    2024-07-11 14:40:05       9 阅读
  7. React@16.x57Redux@4.x(6)- 实现 bindActionCreators

    2024-07-11 14:40:05       12 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 14:40:05       8 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 14:40:05       8 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 14:40:05       7 阅读
  4. Python语言-面向对象

    2024-07-11 14:40:05       10 阅读

热门阅读

  1. TS-类型别名和接口的区别

    2024-07-11 14:40:05       9 阅读
  2. 索引

    2024-07-11 14:40:05       8 阅读
  3. 嵌入式Bootloader面试题面面观(2万字长文)

    2024-07-11 14:40:05       12 阅读
  4. 1.python基础

    2024-07-11 14:40:05       10 阅读
  5. 24/07/11数据结构(6.1215)双链表实现-栈实现

    2024-07-11 14:40:05       10 阅读
  6. Spring框架:核心概念与Spring Boot微服务开发指南

    2024-07-11 14:40:05       8 阅读