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 是单向数据流的核心,使你可以通过可预测且可调试的方式更新应用程序状态。

目录
相关文章
|
2月前
|
JavaScript 数据处理
Vuex 的Mutation 和 Action 有什么区别?
【10月更文挑战第15天】Mutation 和 Action 在 Vuex 中都有着重要的作用,它们相互协作,共同实现了 Vuex 状态管理的功能。理解它们的区别与联系,并在实际应用中正确使用,对于构建高效、可靠的 Vue 应用具有重要意义。
|
4月前
|
存储 JavaScript 前端开发
Redux 中的 Reducer 和 Action
【8月更文挑战第31天】
66 0
|
5月前
|
JavaScript
VUEX 使用学习四 : action
VUEX 使用学习四 : action
44 0
|
7月前
|
JavaScript 前端开发
Vue状态管理:请解释Vuex中的action是什么?它们有什么用途?
Vue状态管理:请解释Vuex中的action是什么?它们有什么用途?
408 2
基于MobX 封装 Action 接口 Loading #85
基于MobX 封装 Action 接口 Loading #85
86 0
Vue3 —— 常用 Composition API(一)(computed函数、watch函数、watchEffect函数、生命周期钩子)
Vue3 —— 常用 Composition API(一)(computed函数、watch函数、watchEffect函数、生命周期钩子)
|
前端开发
react学习案例14-store,action,reducer
react学习案例14-store,action,reducer
52 0
react学习案例14-store,action,reducer
|
存储 JavaScript 前端开发
react 进阶hook 之 Effect Hook
在效果图中,ui是会先出现的,然后我们的title值才会从 viteApp 改成 title 0,所以可以证明 effect的执行时间点是在等ui 渲染之后再来进行执行的,并且打印我会优先effect会优先输出。也就是异步执行
Vuex学习11-vuex的核心概念action
Vuex学习11-vuex的核心概念action
80 0
Vuex学习11-vuex的核心概念action
Vuex学习12-触发action的第二种方式
Vuex学习12-触发action的第二种方式
146 0
Vuex学习12-触发action的第二种方式