Это очень распространенная вещь и, на самом деле, довольно сложная задача. Насколько я знаю, в простом JS нет действительно хорошего и хорошо принятого решения. Первоначально использовались Object.assign
подхода:
return Object.assign({}, state, {
categories: Object.assign({}, state.categories, {
Professional: Object.assign({}, state.Professional, {
active: true
})
})
});
Это слишком просто и громоздкое, я признаю это, но я должен сказать, что мы построили несколько больших приложения с этим подходами, и для числа символов, за исключением является неплохо. В настоящее время, самый популярный подход с использованием Object spread:
return {
...state,
categories: {
...state.categories,
Professional: {
...state.categories.Professional,
active: true
}
}
}
Второй подход является гораздо более чистым, так что если вы используете обычный JS, то кажется, хороший выбор. В Immutable.js я должен признать, что это проще, просто сделать следующий
return state.updateIn(['categories', 'Professional'], x => x.set('active', true));
Но это имеет свои собственные недостатки и предупреждениями, так что лучше думать об этом серьезно, прежде чем совершить его.
И ваш последний вопрос относительно улучшения состояния - обычно лучше не иметь такого глубокого гнездования (разделяйте свои проблемы, очень часто поля не зависят друг от друга), как active
статус может быть разделен на другой объект), но трудно сказать из-за незнания вашего домена. Кроме того, считается, что ваши данные являются normalize.