Mutate React состояние объекта JSON Хранение массива как значения - PullRequest
0 голосов
/ 25 апреля 2020

Как сделать sh или удалить элемент из этого?

  const [addIconMenuList, setAddIconMenuList] = useState({
    "body": ["Logo", "Chest Pocket", "Tag"],
    "hood": ["Logo"],
    "sleeves": ["Cuffs"]
  })
    setAddIconMenuList((prevState) => {
      prevState[rightNavbarType].filter((item) => {
        return item !== type
      })
    })

, и я пытаюсь это не работает

1 Ответ

1 голос
/ 25 апреля 2020

В setAddIconMenuList вы ничего не возвращаете из функции. Попробуйте добавить возврат, как это.

setAddIconMenuList((prevState) => {
  return prevState[rightNavbarType].filter((item) => {
    return item !== type
  })
})

Редактировать: или вы можете избавиться от скобок, окружающих тело функции. Одно подобное утверждение автоматически возвращается.

setAddIconMenuList((prevState) => 
  prevState[rightNavbarType].filter((item) => {
    return item !== type
  })
)

Редактировать: сохранение остатка состояния

Чтобы сохранить остаток предыдущего состояния, а не просто вернуть отфильтрованный список, который вы можете попробовать что-то вроде этого:

setAddIconMenuList((prevState) => {
  return {
    ...prevState,
    [rightNavbarType]: prevState[rightNavbarType].filter((item) => {
      return item !== type
    })
  }
})

...prevState разделяет предыдущий объект на отдельные части, поэтому у вас будет все, что было в этом состоянии ранее, возвращенное в этом объекте.

[rightNavbarType] использует синтаксис вычисляемого свойства ES6, поэтому вы можете получить доступ к нужному свойству, например «body». Затем вы устанавливаете "body" для нового отфильтрованного массива.

...