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

目录
相关文章
|
4月前
|
XML 存储 前端开发
免费在线图片转Base64编码工具
利用图片转 Base64 编码工具(支持 PNG, GIF, JPEG 等格式)。操作极其简单:将目标图片拖拽至工具指定区域,即可自动完成转换并获得编码结果。
1391 3
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
|
监控 前端开发 JavaScript
深入探索谷歌浏览器开发者工具:提升网页开发与调试效率的终极指南(一)
深入探索谷歌浏览器开发者工具:提升网页开发与调试效率的终极指南(一)
490 0
|
11月前
|
关系型数据库 MySQL Java
Servlet+MySQL增删改查 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/geek/1391
对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。
230 20
Bad Request, Resolved [org.springframework.http.converter.HttpMessageNotReadableException,跟着视频仔细比对
Bad Request, Resolved [org.springframework.http.converter.HttpMessageNotReadableException,跟着视频仔细比对
|
前端开发 JavaScript API
如何在React中删除组件
【8月更文挑战第17天】如何在React中删除组件
308 1
|
12月前
|
Web App开发 缓存 安全
Chrome浏览器启动参数大全
这是一组用于定制浏览器行为的命令行参数,包括但不限于:不停用过期插件、放行非安全内容、允许应用中心脚本、停用GPU加速视频、禁用桌面通知、禁用拓展及各类API、调整缓存设置、启用打印预览、隐身模式启动、设定语言、使用代理服务器、无头模式运行等。通过这些参数,用户可以根据需求灵活调整浏览器功能与性能。
|
JavaScript 前端开发 安全
|
前端开发
前端 CSS 经典:模特换装效果
前端 CSS 经典:模特换装效果
229 0
|
存储 机器学习/深度学习 数据采集
基于LightGBM的肺癌分类模型:从预测到个体化治疗
基于LightGBM的肺癌分类模型:从预测到个体化治疗
612 1