@Pogran

Как можно переписать данный вариант state?

У меня есть такой вариант возврата одного из case в reducer
const el = state.structure[action.id].childIds[0];

			if(el) {
				if(action.blockId) {
					return {
						...state,
						structure: {
							...state.structure,
							[el] : {
								...state.structure[el],
								visibility: true
							},
							[action.id] : {
								...state.structure[action.id],
								render : action.render
							},
							[action.blockId] : {
								...state.structure[action.blockId],
								block: action.block,
							}
						}
					};
				} else {
					return {
						...state,
						structure: {
							...state.structure,
							[el] : {
								...state.structure[el],
								visibility: true
							},
							[action.id] : {
								...state.structure[action.id],
								render : action.render
							},
						}
					};
				}
			} else {
				if(action.blockId) {
					return {
						...state,
						structure: {
							...state.structure,
							[action.id] : {
								...state.structure[action.id],
								render : action.render
							},
							[action.blockId] : {
								...state.structure[action.blockId],
								block: action.block,
							}
						}
					};
				} else {
					return {
						...state,
						structure: {
							...state.structure,
							[action.id] : {
								...state.structure[action.id],
								render : action.render
							}
						}
					};
				}

			}


Как можно грамотно его переписать
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
Выглядит как будто у вас один экшен идет за несколько. Попробуйте их разбить - при этом вы можете использовать один общий action creator:

function removeFromStructure(id) {
  return { type: REMOVE_FROM_STRUCTURE, paylodad: id }
}
function doSomething(id) {
  return { type: DO_SOMETHING, paylodad: id }
}
function commonAction(structureObject) {
  return structureObject.blockId ? removeFromStructure(id) : doSomething(id)
}


Код я привел просто для примера. Собственно - разбейте на несколько экшенов и обрабатывайте каждый "маленький" экшен в редьюсере.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы