Redux - как объединить несколько mapDispatchToProps? - PullRequest
1 голос
/ 09 июня 2019

Я занимаюсь разработкой приложения собственного кода / избыточного кода, оно содержит несколько файлов Reducer, которые я могу объединить с помощью combReducers () . Чтобы управлять кодом и поддерживать его в обслуживании, эти файлы также содержат mapDispatchToProps записей (я сделал это, потому что функции диспетчеризации тесно связаны с редукторами), что-то вроде:

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 }),
    }
}

Полагаю, мой вопрос фактически сводится к следующему: как написать combMapDispatchToProps ({counterMapDispatchToProps, statusMapDispatchToProps, ...}) функция?

1 Ответ

2 голосов
/ 09 июня 2019

Поскольку эти функции просто возвращают объект (который затем обрабатывается 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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...