useActionState¶
Canary
Хук useActionState
в настоящее время доступен только в канале React canary и experimental. Подробнее о каналах выпуска здесь. Кроме того, для получения всех преимуществ useActionState
вам необходимо использовать фреймворк, поддерживающий React Server Components.
В более ранних версиях React Canary этот API был частью React DOM и назывался useFormState.
useActionState
- это хук, который позволяет вам обновлять состояние на основе результата действия формы.
1 2 3 4 |
|
Описание¶
useActionState(action, initialState)
¶
Вызовите useActionState
на верхнем уровне вашего компонента, чтобы создать состояние компонента, которое обновляется при вызове действия формы. Вы передаете useActionState
существующую функцию действия формы, а также начальное состояние, и она возвращает новое действие, которое вы используете в своей форме, вместе с последним состоянием формы. Последнее состояние формы также передается в указанную вами функцию.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Состояние формы - это значение, возвращенное действием, когда форма была отправлена в последний раз. Если форма еще не была отправлена, это начальное состояние, которое вы передаете.
При использовании с серверным действием useActionState
позволяет показывать ответ сервера от отправки формы даже до завершения гидратации.
Параметры
fn
: Функция, которая будет вызываться при отправке формы или нажатии кнопки. Когда функция вызывается, она получает предыдущее состояние формы (сначалаinitialState
, которое вы передаете, а затем предыдущее возвращаемое значение) в качестве начального аргумента, а затем аргументы, которые обычно получает действие формы.initialState
: Значение, которое вы хотите получить в качестве начального состояния. Это может быть любое сериализуемое значение. Этот аргумент игнорируется после первого вызова действия.
Возвращаемое значение
useActionState
возвращает массив, содержащий ровно два значения:
- Текущее состояние. Во время первого рендера оно будет соответствовать переданному вами значению
initialState
. После вызова действия оно будет соответствовать значению, возвращенному действием. - Новое действие, которое вы можете передать в качестве свойства
action
компонентуform
или свойстваformAction
любому компонентуbutton
внутри формы.
Ограничения
- При использовании с фреймворком, поддерживающим серверные компоненты React,
useActionState
позволяет сделать формы интерактивными до выполнения JavaScript на клиенте. При использовании без серверных компонентов это эквивалентно локальному состоянию компонента. - Функция, передаваемая
useActionState
, получает в качестве первого аргумента дополнительный аргумент - предыдущее или начальное состояние. Это делает ее сигнатуру иной, чем если бы она использовалась непосредственно как действие формы без использованияuseActionState
.
Использование¶
Использование информации, возвращаемой действием формы¶
Вызовите useActionState
на верхнем уровне вашего компонента, чтобы получить доступ к возвращаемому значению действия из последнего раза, когда форма была отправлена.
1 2 3 4 5 6 7 8 9 10 11 |
|
useActionState
возвращает массив, содержащий ровно два элемента:
- Текущее состояние формы, которое первоначально устанавливается в указанное вами начальное состояние, а после отправки формы устанавливается в возвращаемое значение указанного вами действия.
- Новое действие, которое вы передаете в
<form>
в качестве его свойстваaction
.
Когда форма будет отправлена, будет вызвана указанная вами функция действия. Ее возвращаемое значение станет новым текущим состоянием формы.
Предоставленное вами действие также получит новый первый аргумент, а именно текущее состояние формы. При первой отправке формы это будет начальное состояние, которое вы указали, а при последующих отправках - возвращаемое значение, полученное при последнем вызове действия. Остальные аргументы такие же, как если бы useActionState
не использовался
1 2 3 4 |
|
Отображение информации после отправки формы¶
1. Отображение ошибок формы
Чтобы отобразить сообщения, такие как сообщение об ошибке или тост, возвращаемый серверным действием, оберните действие вызовом useActionState
.
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 |
|
1 2 3 4 5 6 7 8 9 10 |
|
2. Отображение структурированной информации после отправки формы
Возвращаемое значение действия сервера может быть любым сериализуемым значением. Например, это может быть объект, содержащий логическое значение, указывающее на успешность выполнения действия, сообщение об ошибке или обновленную информацию.
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 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Решение проблем¶
Мое действие больше не может читать данные отправленной формы¶
Когда вы оборачиваете действие с помощью useActionState
, оно получает дополнительный аргумент в качестве первого аргумента. Таким образом, отправленные данные формы являются его вторым аргументом, а не первым, как это было бы обычно. Новый первый аргумент, который добавляется, - это текущее состояние формы.
1 2 3 |
|
Источник — https://react.dev/reference/react/useActionState