Redux-如何组合多个mapDispatchToProps?

时间:2019-06-09 14:12:48

标签: reactjs redux

我正在开发一个本机/ redux应用程序,它包含一些我可以使用 combineReducers()合并的Reducer文件。为了管理代码并保持其可维护性,这些文件还包含 mapDispatchToProps 条目(之所以这样做,是因为调度功能与Reducers密切相关),例如:

export const counterMapDispatchToProps = dispatch => {
    return {
        increment: () => dispatch({ type: 'INCREMENT' }),
        decrement: () => dispatch({ type: 'DECREMENT' }),
    }
}

export const statusMapDispatchToProps = dispatch => {
    return {
        setStatus: (text) => dispatch({ type: 'SET_STATUS', status: text }),
    }
}

如果可能的话,我想获取这些mapDispatchToProps的输出并合并它们,以便获得一个产生以下内容的函数,然后可以在连接到我的Redux存储区时使用它:

export const appMapDispatchToProps = dispatch => {
    return {
        increment: () => dispatch({ type: 'INCREMENT' }),
        decrement: () => dispatch({ type: 'DECREMENT' }),
        setStatus: (text) => dispatch({ type: 'SET_STATUS', status: text }),
    }
}

我想我的问题实际上归结为:我该如何编写 combineMapDispatchToProps({counterMapDispatchToProps,statusMapDispatchToProps,...})函数?

1 个答案:

答案 0 :(得分:2)

由于这些函数仅返回一个对象(然后由Consumer HOC处理),因此可以使用ES6扩展-

export const appMapDispatchToProps = dispatch => {
    return {
        ...counterMapDispatchToProps(dispatch),
        ...statusMapDispatchToProps(dispatch),
    }
}

您可以为此添加更多功能,当然也可以从其他文件导入它们。


如果需要ES5,可以使用Object.assign达到类似效果:

export const appMapDispatchToProps = function(dispatch) {
    return Object.assign(counterMapDispatchToProps(dispatch), statusMapDispatchToProps(dispatch));
}