Реагируйте, как удалить свойства из состояния

Я пытаюсь заменить целое состояние или хотя бы удалить все свойства из него.

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

this.state = {}
this.forceUpdate()

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

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

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

1 ответ

Решение

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

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

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

Если нет, вы можете попробовать это, чтобы установить их все неопределенным:

this.setState(
  Object.keys(this.state).reduce((a, c) => {
    a[c] = undefined;
    return a;
  }, {})
)
Другие вопросы по тегам