Удалить ключ из состояния (Redux Reducer) - PullRequest
0 голосов
/ 24 января 2020

У меня есть состояние в Redux, которое в данный момент отображается следующим образом:

До щелчка:

{0: {
    open: false,
    negation: false,
    close: false
    },
1: {
    open: false,
    negation: false,
    close: false,
    bool: "and"
    }
}

После нажатия:

{0: {
    open: false,
    negation: false,
    close: false
    },
1: {}
}

Я бы хотел полностью удалить ключ 1 (обычно это [action.id]).

В настоящее время в редукторе используются следующие случаи:

case 'HANDLE_INCREASE_CHANGE':
  return {
    ...state,
    index: state.index + 1,
    [state.index + 1]: {
      open:false,
      negation: false,
      close: false,
      bool: 'and'
    }
  }
case 'HANDLE_DECREASE_CHANGE':
  return {
    ...state,
    index: state.index - 1,
    [state.index]: {}
  }

Неправильная часть:

[state.index]: {}

Можете ли вы помочь мне, пожалуйста? Большое спасибо!

Ответы [ 3 ]

3 голосов
/ 24 января 2020

Вы просто должны быть в состоянии позвонить delete state[action.id]. Хотя, поскольку вы находитесь в функции редуктора, вы должны сначала взять копию состояния, удалить ее, а затем вернуть скопированную версию.

case: 'HANDLE_DECREASE_CHANGE':
  const next = {...state}
  delete next[action.id]
  return next
2 голосов
/ 24 января 2020

Вы устанавливаете новые свойства для состояния объекта, для удаления вам необходимо использовать delete. Не забудьте сначала сделать копию текущего состояния.

case: 'HANDLE_DECREASE_CHANGE':
  let nextState = {...state}
  delete nextState[propToDelete]
  return nextState

Я считаю, что было бы лучше иметь массив элементов и не устанавливать свойства непосредственно для объекта sate.

const iniitalState = {
 index: 0,
 elements: []
}

case 'HANDLE_INCREASE_CHANGE': {
  state.elements.push({
    open:false,
    negation: false,
    close: false,
    bool: 'and'
  })
  return {...state, index: state.index + 1, elements: [...state.elements] }
}
case 'HANDLE_DECREASE_CHANGE': {
  let newElements = [...state.elements]
  newElements.splice(action.indexToRemove, 1) // Removes Element

  return {...state, index: state.index - 1, elements: [...newElements] }
}
0 голосов
/ 24 января 2020

удалить ключ, который вы хотите удалить:

const resultingState = {...state, index: state.index - 1}
delete resultingState[state.index]
return resultingState

или извлечь его с параметрами покоя:

const {...extractedState, [state.index]: ignored} = state
return {...extractedState, index: state.index - 1}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...