Значение watch() в форме React Hook не обновляется достаточно быстро перед вызовом API внутри useEffectJavascript

Форум по Javascript
Ответить
Anonymous
 Значение watch() в форме React Hook не обновляется достаточно быстро перед вызовом API внутри useEffect

Сообщение Anonymous »

Я использую форму React Hook с функциями watch() и setValue() внутри useEffect, и у меня возникла проблема с синхронизацией.
Вот упрощенная версия моего кода:

Код: Выделить всё

const isSecret = watch("isSecret");

React.useEffect(() => {
if (!isIdentifierValid(identifier)) {
setValue("isSecret", false);
return;
}

void (async () => {
const body = await dispatch(getIdentifierExists({ identifier })).unwrap();

if (body.isSecret!= null) {
setValue("isSecret", !!body.isSecret);
}

await trigger("identifier");

if (!template || !isValid) return;

// PROBLEM: `isSecret` here is still the old value (not updated yet)
const { previewLcd } = await dispatch(
getIdentifierFolderPreview({
identifier,
template,
isSecret, //  сразу в пределах того же цикла рендеринга.

[h4]Чего я хочу[/h4]
Чистый способ:
Установить поле ([code]setValue
) внутри эффекта,
Затем используйте обновленное значение сразу после этого в асинхронном вызове —
без добавления другого useEffect или произвольных таймаутов.

Вопрос

Как правильно обеспечить доступность нового значения из setValue() перед его использованием в том же эффекте?

Подробнее здесь: https://stackoverflow.com/questions/797 ... call-insid
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»