У меня есть редуктор, в котором изменяется текущее состояние объекта путем создания мелкой копии.Редуктор работает, обновляя значение в хранимом объекте template
, затем возвращая объект полного состояния.Редуктор действительно обновляет хранилище, и я могу видеть изменение при обновлении с постоянным состоянием, восстанавливаемым из localStorage.Однако компоненты, подписанные с использованием connect()
, не получают повторную визуализацию.Как мне написать этот редуктор правильным способом, чтобы не изменять состояние?
редуктор:
case UPDATE_STYLE:
// Update the style value of the template
let newState = {
...state
}
newState
.templates[action.payload.selectedTemplateType]
.content[action.payload.selectedTemplate]
.template
.styles[action.payload.styleKey][action.payload.fieldKey]
.value = action.payload.value;
// mutated state - not firing rerenders
return newState;
запуск вызова диспетчеризации (работает):
onStyleChange(styleKey, fieldKey, value){
this.props.dispatch(
updateStyle(selectedTemplateType, selectedTemplate, styleKey, fieldKey, value)
);
}
как дочерний компонент подключен (не рендеринг):
const mapStateToProps = (state) => ({
templates: state.templates.templates,
selectedTemplateType: state.templateTypeSelection.selectedTemplateType,
selectedTemplate: state.templateSelection.selectedTemplate
})
export default connect(mapStateToProps)(Index)