【问题标题】:Redux - how to combine multiple mapDispatchToProps?Redux - 如何组合多个 mapDispatchToProps?
【发布时间】:2019-06-12 01:06:55
【问题描述】:

我正在开发一个 react-native / 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, ...}) 函数?

【问题讨论】:

    标签: reactjs redux


    【解决方案1】:

    由于这些函数只返回一个对象(然后由消费者 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));
    }
    

    【讨论】:

    • 这行得通,但是我发现我必须稍微修改一下: export const appMapDispatchToProps = dispatch => { return { ...counterMapDispatchToProps(dispatch), ...statusMapDispatchToProps(dispatch), } }
    • @MichaelO'Connor Yikes,我怎么会错过这个......很好,我会更新答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 2019-12-19
    • 2022-09-27
    相关资源
    最近更新 更多