首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从状态中删除密钥(Redux Reducer)

从状态中删除密钥(Redux Reducer)
EN

Stack Overflow用户
提问于 2020-01-24 13:44:13
回答 3查看 4.4K关注 0票数 4

我在Redux中有一个状态,当前呈现如下:

单击前的

代码语言:javascript
复制
{0: {
    open: false,
    negation: false,
    close: false
    },
1: {
    open: false,
    negation: false,
    close: false,
    bool: "and"
    }
}

单击后的

代码语言:javascript
复制
{0: {
    open: false,
    negation: false,
    close: false
    },
1: {}
}

我想完全删除键1(通常是action.id)。

目前,减速机的情况如下:

代码语言:javascript
复制
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]: {}
  }

错误的部分是:

代码语言:javascript
复制
[state.index]: {}

你能帮帮我吗?非常感谢!

EN

回答 3

Stack Overflow用户

发布于 2020-01-24 13:50:14

您应该能够调用delete state[action.id]。尽管在还原器函数中,您应该先获取状态的副本,然后从其中删除,然后返回复制的版本。

代码语言:javascript
复制
case: 'HANDLE_DECREASE_CHANGE':
  const next = {...state}
  delete next[action.id]
  return next
票数 8
EN

Stack Overflow用户

发布于 2020-01-24 14:00:18

您正在将新属性设置为state,以便删除,然后需要使用delete。记得先复制一份当前的文件。

代码语言:javascript
复制
case: 'HANDLE_DECREASE_CHANGE':
  let nextState = {...state}
  delete nextState[propToDelete]
  return nextState

我认为最好有一个元素数组,而不是直接将属性设置为sate对象。

代码语言:javascript
复制
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] }
}
票数 2
EN

Stack Overflow用户

发布于 2020-01-24 13:50:35

删除您想要删除的键:

代码语言:javascript
复制
const resultingState = {...state, index: state.index - 1}
delete resultingState[state.index]
return resultingState

或者使用rest参数提取它:

代码语言:javascript
复制
const {...extractedState, [state.index]: ignored} = state
return {...extractedState, index: state.index - 1}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59897667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档