#reactjs #state #immutability #react-state #immer.js
Вопрос:
В чем разница между:
this.setState(produce((draft) => { draft.name ='name'}
и
this.setState(produce(this.state, (draft) => { draft.name ='name'}
кто-нибудь может мне это объяснить?
Комментарии:
1.
this.state
это не функция, зачем вам пытаться ее вызвать?2. Я видел это — const nextState = создать(базовое состояние, черновик => { черновик[1].готово = истинный черновик.нажмите({название: «Твит об этом»}) })
Ответ №1:
В большинстве случаев оба будут действовать одинаково
produce((draft) => { draft.name ='name'})
возвращает функцию, которая обертывает аргумент прокси-сервером и применяет мутацию.setState
позволяет разработчику передать функцию, которая будет вызываться с текущим состоянием.produce(this.state, (draft) => { draft.name ='name'})
возвращает результат применения мутации к Прокси первого аргумента.setState
позволяет передать «обновленное состояние», таким образом, это также будет работать.
Первый подход предпочтительнее из-за следующего
- Если вызывается быстро в последовательности, вы обычно хотите, чтобы следующее состояние было построено поверх измененного предыдущего состояния (известный пример счетчика). И версия функции мутации
setState
-это правильный путь. - Это меньше символов для ввода.