美文网首页react
redux types模块化-解决命名冲突

redux types模块化-解决命名冲突

作者: 被代码耽误的裁缝 | 来源:发表于2020-12-22 15:42 被阅读0次

实现 redux 中 action.type 按照组件分类实现模块化,解决不同组件下 types 的命名冲突。
这里提供两种方案:

项目目录结构

.
├── App.jsx
├── axios
│   └── axios.js
├── components
│   ├── effect
│   │   ├── reducer.js  //定义组件的 reducer
│   │   ├── saga.js      //集中处理组件的副作用操作
│   │   ├── server.js    //集中定义组件的 api fetch
│   │   ├── types.js     //集中定义组件的 action.types变量
│   │   └── view.jsx    //组件入口文件
│   ├── home
│   │   ├── reducer.js
│   │   ├── saga.js
│   │   ├── types.js
│   │   └── view.jsx
│   ├── list
│   │   ├── reducer.js
│   │   ├── saga.js
│   │   ├── types.js
│   │   └── view.jsx
│   ├── reducer.js
│   ├── saga.js
│   └── types.js
├── entry.jsx
└── store
    ├── reducer.js
    ├── saga.js
    └── store.js

第一种方案:利用 Symbol 定义 types
//types.js
export let fetchSucceed = Symbol('fetchSucceed');
export let fetchFailed = Symbol('fetchFailed');
export let fetchCategories = Symbol('fetchCategories');
export let waitChangeAsync = Symbol('waitChangeAsync');

在 reducer.js 中使用

//reducer.js
import * as types from './types'

const defaultState = {
  data: []
}

const reducer = (state = defaultState, action) => {
  switch (action.type) {
    case types.fetchSucceed:
      return Object.assign({}, {
        data: action.data
      });
    case types.fetchFailed:
      return Object.assign({}, {
        data: action.data
      });
    default:
      return state;
  }
}

export default reducer;
第二种方案:使用react-redux-types-loader

在 webpack 中配置 loader

module:{
      rules:[{
        test: /component\/([^/]+\/)*type[s]?.js$/,
        exclude: /node_modules/,
        loaders: ['react-redux-types-loader'],
      }]
}

types.js的使用方式和第一种方案一样,loader 会改写文件源码,转化为 "文件路径+变量名"的字符串,可在chrome redux-devtools 中查看到。

export let fetchSucceed;  //=> "/src/components/effect/fetchSucceed"
export let fetchFailed;
export let fetchCategories;
export let waitChangeAsync;
//或者
export let a,b,c;
//或者
export const a = 'aaa';
export const b = 'bbb';
export let c = 'ccc';

相关文章

  • redux types模块化-解决命名冲突

    实现 redux 中 action.type 按照组件分类实现模块化,解决不同组件下 types 的命名冲突。这里...

  • 模块化

    1.为什么要使用模块化 1.解决命名冲突。当代码达到一定规模,功能很多的时,命名冲突就会出现,模块化可以很好的解决...

  • CMD、AMD、CommonJS 规范

    1.为什么要使用模块化? 1.解决命名冲突,模块之间在命名变量时,不用过于担心命名冲突。2.提高代码复用性,需要某...

  • ES6模块化和webpack打包(模块化部分)

    ✍目录总览: 模块化相关规范 1. 模块化概述 传统开发模式的主要问题 ① 命名冲突 ② 文件依赖 通过模块化解决...

  • ESModule

    模块化解决的问题 命名冲突(命名空间来解决)采用自执行函数的方式 (解决代码的高内聚 低耦合问题) 模块的几种规范...

  • esmodule规范

    模块化解决的问题:命名冲突(命名空间来解决)采用自执行函数的方式 (解决代码的高内聚 低耦合问题) 模块的几种规范...

  • Vue前端工程化-模块化

    1 - 模块化概述 传统开发模式的主要问题:① 命名冲突,② 文件依赖 通过模块化解决上述问题: 模块化就是把单独...

  • AMD_CMD_RequireJS

    1、为什么要使用模块化? 解决命名冲突,当代码量很大的时候很容易有命名冲突。 实现依赖管理,代码量很大时候,代码之...

  • 高级4

    题目1: 为什么要使用模块化?最主要的目的解决命名冲突 假设有100个js文件,不能够知道这个命名有没有冲突...

  • 前端模块化开发总结

    一、模块化开发的作用: 解决命名冲突和文件依赖的问题 二、模块化开发规范: 三、AMD的实现 四、CMD

网友评论

    本文标题:redux types模块化-解决命名冲突

    本文链接:https://www.haomeiwen.com/subject/mgdsnktx.html