Обновление состояния¶
Плоские обновления¶
Обновлять состояние с помощью Zustand очень просто! Вызовите предоставленную функцию set
с новым состоянием, и оно будет неглубоко объединено с существующим состоянием в хранилище. Примечание См. следующий раздел о вложенных состояниях.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|
Глубоко вложенный объект¶
Если у вас есть объект с глубоким состоянием, например, такой:
1 2 3 4 5 6 7 |
|
Обновление вложенного состояния требует определенных усилий для обеспечения неизменяемости процесса.
Обычный подход¶
Как и в React или Redux, обычный подход заключается в копировании каждого уровня объекта состояния. Это делается с помощью оператора спреда ...
, а также путем ручного объединения с новыми значениями состояния. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Это очень долго! Давайте рассмотрим некоторые альтернативы, которые облегчат вам жизнь.
С Immer¶
Многие люди используют Immer для обновления вложенных значений. Immer можно использовать в любое время, когда вам нужно обновить вложенное состояние, например, в React, Redux и, конечно же, Zustand!
Вы можете использовать Immer, чтобы сократить время обновления состояния для глубоко вложенного объекта. Давайте посмотрим на пример:
1 2 |
|
Какое сокращение! Пожалуйста, примите к сведению "загвоздки", перечисленные здесь.
С optics-ts¶
Есть еще один вариант с optics-ts:
1 2 |
|
В отличие от Immer, optics-ts не использует прокси или синтаксис мутации.
С Ramda¶
Вы также можете использовать Ramda:
1 2 |
|
И ramda, и optics-ts также работают с типами.
CodeSandbox демо¶
Источник — https://docs.pmnd.rs/zustand/getting-started/introduction