useEffect vs useLayoutEffect
3013 ワード
今日はuseEffectとuseLayoutEffectの違いを学びたいと思います.
まず、2つのプロセスを理解する必要があります.Renderer:DOM Treeを構成するために各エンティティのスタイル属性を計算するプロセス Paint:リアル画面でLayoutを表示・更新するプロセス
写真ソース
userEffectは、構成部品のレンダリングと塗装後に実行されます.
非同期(非同期)運転.
図を描いた後に実行されるので、UseEffectの内部にdomに影響を与えるコードが表示されると画面が点滅します.
写真ソース
userLayoutEffectは、エレメントレンダリング後に実行され、paintになります.
この操作は同期で実行されます.
paintの前に実行されるためdomを処理するコードが存在してもユーザは点滅を体験しない.
両者の違いから、点滅しないuseLayoutEffectを使った方が良いと思います.
ただし、ユーザLayoutEffectは同期して実行されるため、ユーザがレイアウトを表示するのに時間がかかる場合(ユーザが実行してペイント操作を行うため)、ユーザはレイアウトを表示するのに時間がかかる場合がある.
したがって、デフォルトではuserEffectを使用した方がよい.
例えば、データ取得、イベントハンドラ、ステータスリセット
サンプルコード
実際のテストでは、userLayoutEffectのユーザー体験がより良いことが明らかになりました.
テストした動画をgifにアップロードするのですが、あまり差がないように見えたのでアップロードできませんでした
ユーザLayoutEffectはDOMを描画する前に呼び出されるので、レンダリングする状態を効果領域内で初期化する必要がある場合は、ユーザエクスペリエンスを利用するユーザLayoutEffectをお勧めします.
この文章を読むともっと分かりやすい。
より良い体験を得るためにuseLayoutEffectを適切に使うべきだと思います.
応答式ドキュメントを表示する場合はuseEffectを使用し、問題が発生した場合はuseLayoutEffectを使用します.useEffectとuseLayoutEffectは別々に書かれていますが、場合によっては自分で手を出して、いつ使うのが正しいのかをゆっくり知る必要があります…!
📌 https://medium.com/@jnso5072/react-useeffect-%EC%99%80-uselayouteffect-%EC%9D%98-%EC%B0%A8%EC%9D%B4%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C-e1a13adf1cd5
📌 https://merrily-code.tistory.com/46
まず、2つのプロセスを理解する必要があります.
写真ソース
useEffect
userEffectは、構成部品のレンダリングと塗装後に実行されます.
非同期(非同期)運転.
図を描いた後に実行されるので、UseEffectの内部にdomに影響を与えるコードが表示されると画面が点滅します.
写真ソース
useLayoutEffect
userLayoutEffectは、エレメントレンダリング後に実行され、paintになります.
この操作は同期で実行されます.
paintの前に実行されるためdomを処理するコードが存在してもユーザは点滅を体験しない.
では、いつUserEffectを使い、いつUserLayoutEffectを使うのでしょうか。
両者の違いから、点滅しないuseLayoutEffectを使った方が良いと思います.
ただし、ユーザLayoutEffectは同期して実行されるため、ユーザがレイアウトを表示するのに時間がかかる場合(ユーザが実行してペイント操作を行うため)、ユーザはレイアウトを表示するのに時間がかかる場合がある.
したがって、デフォルトではuserEffectを使用した方がよい.
例えば、データ取得、イベントハンドラ、ステータスリセット
では、useEffectだけを使用してuseLayoutEffectを使用しませんか?
サンプルコード
import { useLayoutEffect, useState } from "react";
const Test = () => {
const [value, setValue] = useState(0);
useLayoutEffect(() => {
if (value === 0) {
setValue(10 + Math.random() * 200);
}
}, [value]);
console.log("render", value);
return <button onClick={() => setValue(0)}>value: {value}</button>;
};
export default Test;
useLayoutEffectは、上記の場合に使用できます.実際のテストでは、userLayoutEffectのユーザー体験がより良いことが明らかになりました.
テストした動画をgifにアップロードするのですが、あまり差がないように見えたのでアップロードできませんでした
ユーザLayoutEffectはDOMを描画する前に呼び出されるので、レンダリングする状態を効果領域内で初期化する必要がある場合は、ユーザエクスペリエンスを利用するユーザLayoutEffectをお勧めします.
この文章を読むともっと分かりやすい。
振り返る🤔
より良い体験を得るためにuseLayoutEffectを適切に使うべきだと思います.
応答式ドキュメントを表示する場合はuseEffectを使用し、問題が発生した場合はuseLayoutEffectを使用します.useEffectとuseLayoutEffectは別々に書かれていますが、場合によっては自分で手を出して、いつ使うのが正しいのかをゆっくり知る必要があります…!
リファレンス
📌 https://medium.com/@jnso5072/react-useeffect-%EC%99%80-uselayouteffect-%EC%9D%98-%EC%B0%A8%EC%9D%B4%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C-e1a13adf1cd5
📌 https://merrily-code.tistory.com/46
Reference
この問題について(useEffect vs useLayoutEffect), 我々は、より多くの情報をここで見つけました https://velog.io/@zzi99/useEffect-vs-useLayoutEffectテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol