首页 > 其他分享 >React 使用的Redux, action type 抽离成常量好还是直接写死好

React 使用的Redux, action type 抽离成常量好还是直接写死好

时间:2024-01-29 16:25:12浏览次数:25  
标签:const React export 抽离成 action LOGIN type FETCH

React 使用的Redux, action type 抽离成常量好还是直接写死好?

在React与Redux结合进行状态管理时,将action type抽离成常量是一种更推荐的做法,而不是直接写死在代码中。原因如下:

  1. 减少错误

    • 如果直接在action creator或reducer中硬编码字符串类型的action type,容易因拼写错误或大小写不一致而导致reducer无法正确响应action。将type定义为常量可以确保类型的一致性和准确性。
  2. 可读性与维护性

    • 抽象出的常量可以清晰地表达action的目的,提高代码的可读性。当查看reducer或action creator时,一眼就能看出某个action是用来做什么的。
    • 当应用变大,action类型增多时,集中管理的常量文件更便于查找和修改。
  3. 模块化与复用

    • 类型常量可以放在单独的文件中,方便不同模块引用和复用,增强代码组织结构。
  4. lint工具支持

    • 一些开发工具和linter(如ESLint)可以通过配置规则来强制检查action type是否从已声明的常量中导出,进一步避免错误。
  5. 类型安全

    • 在TypeScript等强类型语言中,通过定义类型常量还能提供静态类型检查,有助于在编译阶段就发现潜在问题。

综上所述,在实际开发中,为了提升代码质量、降低维护成本和减少潜在错误,通常会将Redux中的action type抽离成常量。例如:

// actionTypes.js
export const INCREMENT = 'INCREMENT';
export const DECREMENT = 'DECREMENT';

// actions.js
import { INCREMENT, DECREMENT } from './actionTypes';

function increment() {
  return { type: INCREMENT };
}

function decrement() {
  return { type: DECREMENT };
}

export { increment, decrement };

// reducer.js
import { INCREMENT, DECREMENT } from './actionTypes';

const counterReducer = (state = 0, action) => {
  switch (action.type) {
    case INCREMENT:
      return state + 1;
    case DECREMENT:
      return state - 1;
    default:
      return state;
  }
};

这样,每个action都有一个明确且统一的type标识符,提高了整个应用的状态管理和更新过程的健壮性。

actionTypes 是根据模块拆分成多个,还是所有的模块都写到一个js里呢?
关于action types的组织方式,可以根据项目的规模和模块划分来灵活决定。以下两种常见的方式供参考:

  1. 按模块拆分成多个文件
    当项目较大、模块化程度较高时,可以将每个模块相关的action types分别放在各自的文件中。这样有助于代码结构清晰,方便模块间的独立开发和维护。例如:

    // modules/auth/actionTypes.js
    export const LOGIN_REQUEST = 'LOGIN_REQUEST';
    export const LOGIN_SUCCESS = 'LOGIN_SUCCESS';
    export const LOGIN_FAILURE = 'LOGIN_FAILURE';
    
    // modules/user/actionTypes.js
    export const FETCH_USER_REQUEST = 'FETCH_USER_REQUEST';
    export const FETCH_USER_SUCCESS = 'FETCH_USER_SUCCESS';
    export const FETCH_USER_FAILURE = 'FETCH_USER_FAILURE';
    
  2. 集中在一个文件中
    对于小型项目或者action类型较少的情况,可以将所有action types集中在一个文件中统一管理。这样可以减少文件数量,简化引入路径。

    // actionTypes.js
    export const LOGIN_REQUEST = 'auth/LOGIN_REQUEST';
    export const LOGIN_SUCCESS = 'auth/LOGIN_SUCCESS';
    export const LOGIN_FAILURE = 'auth/LOGIN_FAILURE';
    
    export const FETCH_USER_REQUEST = 'user/FETCH_USER_REQUEST';
    export const FETCH_USER_SUCCESS = 'user/FETCH_USER_SUCCESS';
    export const FETCH_USER_FAILURE = 'user/FETCH_USER_FAILURE';
    

    在第二种方式中,为了在一定程度上保持模块化,可以通过命名空间(如auth/LOGIN_REQUEST)来区分不同模块的action types。

总结来说,选择哪种方式主要取决于项目的实际需求和团队的编码规范。无论哪种方式,关键都是要保证action types的一致性和可读性,并且易于管理和维护。

标签:const,React,export,抽离成,action,LOGIN,type,FETCH
From: https://www.cnblogs.com/longmo666/p/17994767

相关文章

  • React-Navigation基础知识
    ReactNavigation在App中创建导航结构Web浏览器中,可以通过a链接到不同的页面,当用户按下后退按钮,浏览器从访问记录堆栈中弹出项目RN无法像浏览器一样管理访问路由,需要通过ReactNavigation实现ReactNavigation的本机堆栈导航器为App提供一种在屏幕之间转换和管理导航历史记录......
  • LangChain大模型应用开发指南:从基础链式结构到ReAct对话解构
    在自然语言处理领域,大模型的应用已经成为了一种趋势。LangChain是一个基于深度学习的自然语言处理框架,它通过使用链式结构和ReAct对话模型,为开发者提供了一种高效、灵活的方式来进行大模型应用开发。本指南将介绍如何从基础链式结构开始,逐步构建ReAct对话解构,以实现自然语言处理应......
  • 事务提交之后再执行某些操作 → 引发对 TransactionSynchronizationManager 的探究
    开心一刻昨晚,小妹跟我妈聊天小妹:妈,跟你商量个事,我想换车,资助我点呀妈:哎呀,你那分扣的攒一堆都够考清华的,还换车资助点,有车开就不错了小妹:你要是这么逼我,别说哪天我去学人家傍大款啊妈:哎呀妈,你脸上那褶子比你人生规划都清晰,咋地,大款缺地图呀,找你?小妹:......
  • 创建react基础项目所遇到的坑
    1.第一个就是创建开发环境,一般是使用的命令npxcreate-react-app(你的姓名名称),例如npxcreate-react-appreact-basic,这样等命令执行结束之后就会有这个react开发的环境了遇到的问题:1.命令执行缓慢 解决办法:更换镜像源,可以多搜搜镜像源,找到有用的执行命令修改     ......
  • Reactor和Proactor
    目录Reactor模型Proactor模型总结实际应用优缺点示例Reactor模型和Proactor模型都是用于处理异步I/O操作的并发模型,它们在设计和实现上有一些区别。Reactor模型Reactor模型(反应器模型)是一种基于事件驱动的并发模型,主要用于处理网络通信等I/O密集型任务。在Reactor模......
  • React中的Key属性的作用
    在React中,我们常常会遇到需要渲染列表或循环生成组件的场景。为了提高性能和优化用户体验,React引入了一个特殊的属性——key。本文将详细介绍React中key属性的作用、原理,并提供一些最佳实践。一、Key属性的作用Key属性是React要求使用者在渲染多个组件时提供的一个特殊属性。它的作......
  • MetaGPT day04 MetaGPT ActionNode
    ActionNode说明文档导读#什么是ActionNode?1.ActionNode是Action的通用化抽象2.ActionNode是SOP的最小单元#ActionNode是Action的通用化抽象:反推可得知Action不够通用化?也就是说ActionNode的粒度比action更细? Action-粒度更细->ActionNode#Actio......
  • github action 自动化部署asp.net core应用到服务器
    在自己的仓库里工作流编辑workflow贴上自己的工作流name:ASP.NETCoreDeploymenton:push:branches:-master#你可以根据需要更改分支名称(在向master分支推送的时候触发这个workflow)jobs:deploy:runs-on:ubuntu-latest#使用Ubuntu环......
  • Programming Abstractions in C阅读笔记:p254-p257
    《ProgrammingAbstractionsinC》学习第70天,p254-p257总结,总计4页。一、技术总结1.minimaxstrategy(极小化极大算法)p255,Thisidea--findingthepositionthatleavesyouropponentwiththeworstpossiblebestmove--iscalledtheminimaxstrategybecausethegoa......
  • react-redux 的使用(三)
    react-redux的使用(三)单个组件的场景下,我们已经学会了如何从仓库里面拿值,那么其他组件怎么拿呢?关键在于store目录下的index.js文件,如下:import{createStore,applyMiddleware,combineReducers}from'redux'importthunkfrom'redux-thunk'//通过combineReducers将多......