Реагируйте, как удалить свойства из состояния - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь заменить все состояние или, по крайней мере, удалить все свойства из него.

Перед реакцией 16 я только что назвал эти две строки

this.state = {}
this.forceUpdate()

С обновлением для реакции 16,это больше не работает.В настоящее время у меня есть этот обходной путь в методе shouldComponentUpdate:

for (let prop in nextState) { 
    if (nextState.hasOwnProperty(prop)) { 
        delete nextState[prop]; 
    } 
}

Но это «чувствует» не правильно.Так кто-нибудь знает правильный способ сбросить все состояние с новым объектом?Насколько я тестировал this.setState, он просто меняет различия и оставляет другие свойства без изменений.

1 Ответ

0 голосов
/ 13 декабря 2018

Вы не можете удалить свойства из состояния, потому что оно внутренне использует слияние

nextState = Object.assign({}, nextState, partialState);

Так что нет способа удалить уже существующие ключи.Единственное, что вы можете сделать, это установить текущие ключи на неопределенные.Если вам известны свойства, вы можете установить их вручную.

Если нет, попробуйте установить их все на неопределенное значение:

this.setState(
  Object.keys(this.state).reduce((a, c) => {
    a[c] = undefined;
    return a;
  }, {})
)
...