Вот упрощенная версия моего кода:
Код: Выделить всё
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
Мобильная версия