тд; др. это более «общая» практика кодирования. Но просто давайте поместим это в контекст реаги-редукса.
Скажем, если вы пойдете с заходом на посадку1, то у вас, вероятно, будет 5 создателей action как
function updateInput1({value}) { return {type: 'UPDATE_INPUT1', payload: {value}} }
...
function updateInput5({value}) { return {type: 'UPDATE_INPUT5', payload: {value}} }
также, если у вас есть actionTypes, тогда
const UPDATE_INPUT1 = 'UPDATE_INPUT1'
...
const UPDATE_INPUT5 = 'UPDATE_INPUT5'
редуктор, вероятно, будет выглядеть как
function handleInputUpdate(state = {}, {type, payload: {value}}) {
switch (type) {
case UPDATE_INPUT1: return {..., input1: value}
...
case UPDATE_INPUT5: return {..., input5: value}
default: return state
}
}
В чем проблема, на самом деле, я не думаю, что вы распространяете слишком много реквизита в mapStateToProps
/ mapDispatchToProps
, Не повторяйте себя !
Естественно, вам нужна более общая функция, чтобы избежать этого,
const UPDATE_INPUT = 'UPDATE_INPUT'
function updateInput({name, value}) { return {type: UPDATE_INPUT, payload: {name, value}} }
function handleInputUpdate(state = {inputs: null}, {type, payload: {name, value}}) {
switch (type) {
case UPDATE_INPUT: return {inputs: {...state.inputs, [name]: value}}
default: return state
}
}
Наконец, часть «селектор», основанная на том, как спроектировано состояние, получить реквизиты компонента из него, будет довольно тривиальной
function mapStateToProps(state) { return {inputs: state.inputs} }
function mapDispatchToProps(dispatch) { return {update(name, value) { dispatch(updateInput(name, value)) } }
Короче говоря, это не обязательно проблема редукса / реагирования, это скорее то, как вы разрабатываете состояние приложения для пользовательского интерфейса. Редукс просто предлагает вам утилиты и накладывает некоторые ограничения для включения «путешествия во времени» (переходы состояний делаются явными внутри обработчик мутаций, основанный на отдельном действии).