STARTPOINT_DEV Telegram 54
📢 Новые хуки в React 19! Часть 1.

В одном из предыдущих постов мы писали про обновление React 19, и вы проголосовали за новые хуки для работы с состоянием! 💡

Я решила поразбираться в них, чтобы понять, что к чему и чем они отличаются от наших старых добрых и любимых useState и useReducer. На разборе у меня были три самых свежих и интересных:

1. useActionState
2. useFormStatus
3. useOptimistic

Все примеры лежат в нашем репозитории здесь 👉 GitHub

🔍 useActionState и useFormStatus

В документации React говорится, что useActionState даст преимущество в работе с Server Actions, поэтому я подняла проект, используя Next 15, который из коробки поддерживает React 19 (и сам находится в бете).

Без использования директивы "use server", useActionState может показаться ничем не отличающимся от useState. Однако в сочетании с Server Action он становится очень интересным инструментом.

В самом первом примере есть простая форма с одним полем, которая отправляет данные на сервер с помощью useActionState.


export function FormUseActionState() {
const [result, formAction] = useActionState(submitForm, null);

return (
<form action={formAction}>
<h2>Form With useActionState</h2>
<input name="title" />

<button type="submit">Save!</button>
</form>
);
}



'use server';

export const submitForm = (prevState: string | null, form: FormData) => {
return form.get('title')?.toString() || '';
};


Примечательно, что в случае работы с Server Action нам достаточно просто передать его первым аргументом в useActionState, и дальше мы можем использовать возвращаемый из хука formAction напрямую в теге form. Таким образом мы:
1. совершенно не думаем о том, каким образом данные будут ходить с клиента на сервер и обратно
2. полагаемся на нативную браузерную обработку форм, не используя дополнительные обработчики onChange каждого поля и отдельные состояния, если нам это не нужно
3. можем миксовать серверный и клиентский код рядом друг с другом

Во втором примере можно увидеть, что у нас также доступен isPending:


const [result, formAction, isPending] = useActionState(submitForm, null);


Однако если у нас произойдет какая-то ошибка в серверном submitForm, то все наше приложение упадет - можно посмотреть на 3 примере. А это значит, что мы обязательно должны позаботиться об обработке ошибок в той функции, которую передаём хуку useActionState.

Также, если мы не хотим заниматься глубоким прокидыванием isPending в дочерние компоненты форм, можно использовать новый хук useFormStatus - 4 пример


const { pending } = useFormStatus();


✍️ Во второй части разберем хук useOptimistic, а пока пишите в комментариях, что показалось интересным и как, по вашему мнению, часто будут использоваться новые хуки!

❤️ Реагируйте, если хотите увидеть обзор на Server Components и Server Actions!
👍21



tgoop.com/startpoint_dev/54
Create:
Last Update:

📢 Новые хуки в React 19! Часть 1.

В одном из предыдущих постов мы писали про обновление React 19, и вы проголосовали за новые хуки для работы с состоянием! 💡

Я решила поразбираться в них, чтобы понять, что к чему и чем они отличаются от наших старых добрых и любимых useState и useReducer. На разборе у меня были три самых свежих и интересных:

1. useActionState
2. useFormStatus
3. useOptimistic

Все примеры лежат в нашем репозитории здесь 👉 GitHub

🔍 useActionState и useFormStatus

В документации React говорится, что useActionState даст преимущество в работе с Server Actions, поэтому я подняла проект, используя Next 15, который из коробки поддерживает React 19 (и сам находится в бете).

Без использования директивы "use server", useActionState может показаться ничем не отличающимся от useState. Однако в сочетании с Server Action он становится очень интересным инструментом.

В самом первом примере есть простая форма с одним полем, которая отправляет данные на сервер с помощью useActionState.


export function FormUseActionState() {
const [result, formAction] = useActionState(submitForm, null);

return (
<form action={formAction}>
<h2>Form With useActionState</h2>
<input name="title" />

<button type="submit">Save!</button>
</form>
);
}



'use server';

export const submitForm = (prevState: string | null, form: FormData) => {
return form.get('title')?.toString() || '';
};


Примечательно, что в случае работы с Server Action нам достаточно просто передать его первым аргументом в useActionState, и дальше мы можем использовать возвращаемый из хука formAction напрямую в теге form. Таким образом мы:
1. совершенно не думаем о том, каким образом данные будут ходить с клиента на сервер и обратно
2. полагаемся на нативную браузерную обработку форм, не используя дополнительные обработчики onChange каждого поля и отдельные состояния, если нам это не нужно
3. можем миксовать серверный и клиентский код рядом друг с другом

Во втором примере можно увидеть, что у нас также доступен isPending:


const [result, formAction, isPending] = useActionState(submitForm, null);


Однако если у нас произойдет какая-то ошибка в серверном submitForm, то все наше приложение упадет - можно посмотреть на 3 примере. А это значит, что мы обязательно должны позаботиться об обработке ошибок в той функции, которую передаём хуку useActionState.

Также, если мы не хотим заниматься глубоким прокидыванием isPending в дочерние компоненты форм, можно использовать новый хук useFormStatus - 4 пример


const { pending } = useFormStatus();


✍️ Во второй части разберем хук useOptimistic, а пока пишите в комментариях, что показалось интересным и как, по вашему мнению, часто будут использоваться новые хуки!

❤️ Реагируйте, если хотите увидеть обзор на Server Components и Server Actions!

BY Настя Котова // Frontend & Node.js




Share with your friend now:
tgoop.com/startpoint_dev/54

View MORE
Open in Telegram


Telegram News

Date: |

Just as the Bitcoin turmoil continues, crypto traders have taken to Telegram to voice their feelings. Crypto investors can reduce their anxiety about losses by joining the “Bear Market Screaming Therapy Group” on Telegram. Concise The initiatives announced by Perekopsky include monitoring the content in groups. According to the executive, posts identified as lacking context or as containing false information will be flagged as a potential source of disinformation. The content is then forwarded to Telegram's fact-checking channels for analysis and subsequent publication of verified information. How to create a business channel on Telegram? (Tutorial) While the character limit is 255, try to fit into 200 characters. This way, users will be able to take in your text fast and efficiently. Reveal the essence of your channel and provide contact information. For example, you can add a bot name, link to your pricing plans, etc.
from us


Telegram Настя Котова // Frontend & Node.js
FROM American