Size: a a a

JavaScript.Ninja

2021 November 29

АЗ

Андрей Звёздочка... in JavaScript.Ninja
Я был не прав. В статье в этом месте говорится, что сначала отработают все эффекты, а потом будет новый апдейт
источник

МУ

Максим Усачёв... in JavaScript.Ninja
Вот, в том-то и дело. Хм, надо подумать. Ведь речь же идёт именно про первую сбобочку, как бы useEffect(() => () => …);
источник

МУ

Максим Усачёв... in JavaScript.Ninja
Тогда этот вопрос снова актуальный. Что значит «сбрасывается»?)
источник

МУ

Максим Усачёв... in JavaScript.Ninja
Допустим вызывается useEffect, в нём что-то делается, это и назыввается «сбрасывается»?
источник

VK

Vladimir Klimov in JavaScript.Ninja
Нет, сбрасывается - это вызов возвращаемого колбека
источник

МУ

Максим Усачёв... in JavaScript.Ninja
блин, я запутался((( То есть всё же Андей был прав? речь про  return callback, который возвращает useEffect?
источник

VK

Vladimir Klimov in JavaScript.Ninja
Речь где? Слово flush не означает "сбрасывать", на сколько мне известно
источник

МУ

Максим Усачёв... in JavaScript.Ninja
Может и не означает, видимо я неправильно перевёл(
источник

VK

Vladimir Klimov in JavaScript.Ninja
Although useEffect is deferred until after the browser has painted, it’s guaranteed to fire before any new renders. React will always flush a previous render’s effects before starting a new update


Этот абзац значит, что все обновления, запланированные для какого-то рендера обязательно выполнятся до следующего чтобы поддерживать консистентность
источник

МУ

Максим Усачёв... in JavaScript.Ninja
аа, то есть речь НЕ про  return callback, который возвращается из useEffect, а речь именно про саму функцию useEffect (здесь первыая скобочка  useEffect(() => () => …);?)
источник

VK

Vladimir Klimov in JavaScript.Ninja
Да, речь про то, что все эффекты будут выполнены до начала следующего цикла апдейта
источник

VK

Vladimir Klimov in JavaScript.Ninja
Порядок их выполнения гарантирован, в общем
источник

МУ

Максим Усачёв... in JavaScript.Ninja
ага, ясно, а поясните, плз, как правильно понимать эту схему?  То есть, сначала читаем перввую строку вверху:

Произошёл первый рендер, потом сработал useLayoutEffect, потом произошла отрисовка, потом сработал useEffect

Именно так читаестя перввая строка?
А потом после этого идём уже на вторую строку, так?
источник

VK

Vladimir Klimov in JavaScript.Ninja
Да, там все просто
источник

МУ

Максим Усачёв... in JavaScript.Ninja
А почему тогда в первой строке useEffect срабоатывает ПОсле отрисовке, а во второй строке Перед?
источник

VK

Vladimir Klimov in JavaScript.Ninja
Так об этом же статья, ну)
источник

МУ

Максим Усачёв... in JavaScript.Ninja
Ведь в обеих строках используется useLayoutEffect
источник

МУ

Максим Усачёв... in JavaScript.Ninja
ну вот я и запутался, в силу слабого опыта не могу сообразить(
источник

VK

Vladimir Klimov in JavaScript.Ninja
Дело не  в том, когда он используется
Это диаграмма про то, что когда вызывается
источник

МУ

Максим Усачёв... in JavaScript.Ninja
Аа, я понял. В первой строке показан случай. когда в useLayoutEffect НЕ происходит обновления состояния (то есть НЕт перерендера), поэтому после него идёт отрисовка, а затем useEffect, как и положено работать useEffect-у.

А во второй строке показан случай когда useLayoutEffect происходит обновление состояния, поэтому и порядок срабатывания useEffect тоже меняется, да?
источник