我有来自不同包的动作,这些包具有如下相同的名称:
import { bindActionCreators } from 'redux';
import { setActiveLanguage } from 'react-localize-redux';
import * as actionCreators from '../actions/actionCreators';
import * as toggleActions from '../actions/toggleActions';
import {actions as rrfActions} from 'react-redux-form';
function mapDispatchToProps(dispatch) {
return bindActionCreators(
{
...actionCreators,
...toggleActions,
setActiveLanguage,
...rrfActions
},
dispatch);
}
export default mapDispatchToProps
由于toggleActions
和rrfActions
都有toggle
动作,嵌套rrfActions
可以耍(?)来调用动作,但我无法阻止减速器听取相同的TOGGLE
动作类型。除了没有针对所有连接组件的通用mapDispatchToProps
之外,还有其他解决方法,而不是非常具体的组件
干杯!
答案 0 :(得分:1)
相同的reducer侦听器通过redux的设计提供相同的动作类型。如果您希望不同的侦听器对您的操作负责,则该操作必须具有不同的类型。你为什么不想使用前缀/后缀?
MY_SIMPLE_ACTION
MY_SIMPLE_ACTION_AREA1
MY_SIMPLE_ACTION_AREA2
在行动调度员中,您可以传递指定区域的附加参数:
export function onDoSomething(param1, param2, referer) {
return dispatch({
type: MY_SIMPLE_ACTION + (referer ? `_${referer}` : ''),
payload: { param1, param2 }
})
}
答案 1 :(得分:0)
我解决这个问题的方法是重命名操作:
import { bindActionCreators } from 'redux';
import { setActiveLanguage } from 'react-localize-redux';
import * as actionCreators from '../actions/actionCreators';
import * as toggleActions from '../actions/toggleActions';
import { actions as rrfActions } from 'react-redux-form';
let renamedActions = {};
Object.keys(rrfActions).map((v,k)=> {
renamedActions['rrf' + v.replace(/\b\w/g, l => l.toUpperCase())] = rrfActions[v]
// toggle -> rrfToggle
return null;
})
function mapDispatchToProps(dispatch) {
return bindActionCreators(
{
...actionCreators,
...toggleActions,
setActiveLanguage,
...renamedActions
},
dispatch);
}
export default mapDispatchToProps
答案 2 :(得分:0)
首先,为操作常量的值命名空间
const TOGGLE = 'namespace/TOGGLE'
然后,如果您这样定义减速器
const TOGGLE = 'namespace/TOGGLE'
switch (action.type) {
case TOGGLE:
// do_stuff
}
属性action.type
的求值必须精确地为'namespace/TOGGLE'
。
react-redux-form 中的TOGGLE
操作的值不太可能包含您唯一的名称空间,对吧?
您的减速器现在是安全的。
来源