Redux 中定义 Action

简介: 【8月更文挑战第30天】

Redux 中的 action 是描述状态更新意图的对象。它们是单向数据流的核心,因为它们是唯一可以更新 Redux store 中状态的方法。

Action 的结构

Redux action 必须遵循特定的结构:

  • type: 一个字符串,标识 action 的类型。
  • payload: 可选的附加数据,根据 action 类型而异。

创建 Action

Redux 提供了几个实用程序函数来帮助创建 action:

  • createAction(type, payloadCreator): 创建一个 action 创建函数,它生成具有指定类型和有效负载的 action。
  • createAsyncThunk(type, payloadCreator): 创建一个异步 action 创建函数,它返回一个 thunk 函数,该函数可以执行异步操作并分发 action。
  • createSlice(options): 创建一个 reducer 和 action 创建函数的集合,简化了创建相关 action 和 reducer 的过程。

最佳实践

定义 Redux action 时,请遵循以下最佳实践:

  • 使用有意义的类型: 选择描述性且唯一的 action 类型。
  • 保持有效负载简洁: 只有在绝对必要时才包含有效负载。
  • 使用 action 创建函数: 使用 Redux 提供的实用程序函数来创建 action,以确保一致性和可读性。
  • 遵循命名约定: 考虑为 action 类型和有效负载属性遵循命名约定,例如使用大写字母或前缀。

示例

以下是一些定义 Redux action 的示例:

// 使用 createAction
const incrementCounter = createAction('INCREMENT_COUNTER');

// 使用 createAsyncThunk
const fetchUserData = createAsyncThunk('FETCH_USER_DATA', async (userId) => {
  const response = await fetch(`/users/${userId}`);
  return response.json();
});

// 使用 createSlice
const counterSlice = createSlice({
  name: 'counter',
  initialState: 0,
  reducers: {
    increment: (state) => state + 1,
    decrement: (state) => state - 1,
  },
});

在组件中使用 Action

在组件中,可以使用 useDispatch hook 来分发 action:

import { useDispatch } from 'react-redux';

const MyComponent = () => {
  const dispatch = useDispatch();

  const handleIncrement = () => {
    dispatch(incrementCounter());
  };

  return (
    <button onClick={handleIncrement}>+</button>
  );
};

结论

通过遵循最佳实践并使用 Redux 提供的实用程序函数,你可以定义清晰、一致且可维护的 Redux action。这些 action 是单向数据流的核心,使你可以通过可预测且可调试的方式更新应用程序状态。

目录
相关文章
|
9天前
|
JavaScript 数据处理
Vuex 的Mutation 和 Action 有什么区别?
【10月更文挑战第15天】Mutation 和 Action 在 Vuex 中都有着重要的作用,它们相互协作,共同实现了 Vuex 状态管理的功能。理解它们的区别与联系,并在实际应用中正确使用,对于构建高效、可靠的 Vue 应用具有重要意义。
|
3月前
|
存储 JavaScript 前端开发
Redux 中的 Reducer 和 Action
【8月更文挑战第31天】
51 0
|
4月前
|
JavaScript
VUEX 使用学习四 : action
VUEX 使用学习四 : action
32 0
|
6月前
|
JavaScript 前端开发
Vue状态管理:请解释Vuex中的action是什么?它们有什么用途?
Vue状态管理:请解释Vuex中的action是什么?它们有什么用途?
356 2
基于MobX 封装 Action 接口 Loading #85
基于MobX 封装 Action 接口 Loading #85
77 0
|
前端开发
react学习案例14-store,action,reducer
react学习案例14-store,action,reducer
49 0
react学习案例14-store,action,reducer
|
JavaScript
redux ts(typescrip) reducer中action的类型检查
实现的业务场景,我想实现一个用户管理的功能,可以新增用户,删除,修改用户等。每一个功能都是独立的并且所需要的参数是不一样的,所以做了以下类型检查。
redux ts(typescrip) reducer中action的类型检查
|
JavaScript 前端开发 C++
搞懂React的state和生命周期函数(lifecycle methods)
State and Lifecycle 何谓state A component needs state when some data associated with it changes over time. For example, a Checkbox component might need isChecked in its state, 组件内部涉及的数据会根据时间条件变化 随着数据的变化,要相应的更新DOM 此时:需要使用state去接收这些不断变化的数据,然后通过setState更新DOM
111 0
|
前端开发
react使用Context方法实现组件通信(案例说明嵌套传值+详细用法总结)
之前的文章我们介绍了在react中使用props实现组件通信,比如父子,祖孙通信,但是使用props一层层传递的时候还是很麻烦的,那么今天这篇文章就来介绍新的用法——使用Context实现组建通信
367 0
|
JavaScript 前端开发
react-redux-轻松搞定-2-reducer-action拆分(二)
react-redux语法基础 这篇文章我们在项目中使用下 state也可以按需拆分 这节我们主要拆分reducer
152 0
react-redux-轻松搞定-2-reducer-action拆分(二)