В чем разница между передачей this.state для создания и нет? Immer.js

#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:

В большинстве случаев оба будут действовать одинаково

  1. produce((draft) => { draft.name ='name'}) возвращает функцию, которая обертывает аргумент прокси-сервером и применяет мутацию. setState позволяет разработчику передать функцию, которая будет вызываться с текущим состоянием.
  2. produce(this.state, (draft) => { draft.name ='name'}) возвращает результат применения мутации к Прокси первого аргумента. setState позволяет передать «обновленное состояние», таким образом, это также будет работать.

Первый подход предпочтительнее из-за следующего

  1. Если вызывается быстро в последовательности, вы обычно хотите, чтобы следующее состояние было построено поверх измененного предыдущего состояния (известный пример счетчика). И версия функции мутации setState -это правильный путь.
  2. Это меньше символов для ввода.