如何将Redux操作拆分为多个文件

Chr*_*gas 13 redux

我有一个actions文件夹,其中包含我的操作类型常量的常用types.js文件,以及执行以下操作的index.js文件

import axios from 'axios';
import { browserHistory } from 'react-router';
import {
  AUTH_USER,
  UNAUTH_USER,
  AUTH_ERROR,
  FETCH_MESSAGE
} from './types';
Run Code Online (Sandbox Code Playgroud)

并为我的所有行为导出功能.我想知道,有没有办法可以创建多个文件来定义我的动作,所以index.js不会变得太长,然后将它们导入到我的index.js中,所以在我的组件中我仍然可以做到例如import { loginUser } from '../../actions';而不是不得不担心行动来自哪个档案?

nbk*_*ope 49

假设您具有以下目录结构:

actions/
  index.js
  types.js
  ProductActions.js
Run Code Online (Sandbox Code Playgroud)

在你的actions/index.js中,写:

export * from './ProductActions';
Run Code Online (Sandbox Code Playgroud)

然后将ProductActions.js定义为:

import axios from 'axios';
import { ... } from './types';

export const fetchProducts = () => { ... };
export const deleteProduct = () => { ... };
Run Code Online (Sandbox Code Playgroud)

还记得使用新的操作类型文件更新Reducer:

import { ... } from '../actions/types'
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的是,除了感觉像是es6时髦者之外,执行export const fetchProducts =()=> {...};`vs export函数fetchProducts(){...}`是否有优势? (2认同)
  • @ChrisTsongas,你可以使用其中任何一个.我个人决定坚持使用ES6语法,所以我几乎不再编写函数关键字了.但只是为了记录,使用函数与箭头函数语法之间的范围存在差异.基本上,关键字*this*将具有不同的含义.请参阅http://jsrocks.org/2014/10/arrow-functions-and-their-scope/等文章 (2认同)

cda*_*iga 7

比方说,我们有两个动作文件; actionsA和ActionsB.假设在actionsA中我们有以下动作功能.

//actionsA

//You can import your actionTypes here
export function functionActionsA1(){ /* action body ActionsA1 */}

export function functionActionsA2(){ /* action body ActionsA2 */}
Run Code Online (Sandbox Code Playgroud)

在actionsB中,我们有以下代码:

//actionsB

//You can import your actionTypes here

export function functionActionsB1(){ /* action body ActionsB1 */}

export function functionActionsB2(){ /* action body ActionsB2 */}
Run Code Online (Sandbox Code Playgroud)

假设我们有一个包含这两个文件的文件夹操作; actionsA和actionsB以及index.js文件.

actions/ 
   index.js
   actionsA.js
   actionsB.js
Run Code Online (Sandbox Code Playgroud)

在index.js文件中,我们从actionsA和actionsB导入不同的操作,然后导出导入的函数.

//index.js
import {functionActionsA1, functionActionsA2 } from './actionsA'
import {functionActionsB1, functionActionsB2} from './actionsB'

export functionActionsA1
export functionActionsA2
export functionActionsB1
export functionActionsB2
Run Code Online (Sandbox Code Playgroud)

现在您只需导入索引文件并获取您想要使用的操作,如下所示:

import {functionActionsA1,functionActionsB2} from '../../actions/index'
Run Code Online (Sandbox Code Playgroud)

  • 在尝试这样的解决方案时,我得到了一个解析错误,说我需要在`{}`中包装我正在导出的内容(例如,`functionActionsA1`).因此,index.js文件底部的每个导出行应该更像`export {functionActionsA1}`. (2认同)