USELOWOUTTEFECT : USEの違いと使用方法



私は、人々のalotが反応でuseEffectuseLayoutEffectフックの違いを知らないと気がつきました.useLayoutEffectのユースケースを見つけるのはとても難しい仕事のようです.
それにまっすぐに飛び込んで、このフックが本当にすべてであるものを見ましょう、彼らの違い(s)とそれらを使うとき.

効果

useEffect機能コンポーネントから副作用を実行できます.UseEffectsが呼び出されたとき、反応はDOMに変更された後にのみあなたの副作用を表示することを知っています
デフォルトでは、アクションは最初のレンディングを含むすべてのレンダリング後の効果を実行します.これは、コンポーネントがレンダリングされた後にのみuseEffectが行われるということです.
しかし、あなたがあなたの副作用がDOM突然変異の後、同期的に火をつける必要があるならば、それは、これまでにどんなちらつきまたは視覚的な一貫性にでも気づかないユーザーのない次のブラウザー塗料の前に、あなたはuseLayoutEffectを使う必要があります

国際交流基金

useLayoutEffectはDOM突然変異の後、同期して、ブラウザーの前に新しい変化をペンキにするでしょう.このフックは、すべてのDOM要素のスクロール高さ、スクロール幅、スクロール位置、その他のスタイルのようなDOM測定を行うのに特に便利です.

コード例を作りましょう


useEffect(()=>{
  console.log("I will run second instead of first")
});

useLayoutEffect(()=>{
  console.log("I will run first")
})

JavaScriptスクリプトは、単一スレッドプログラミング言語です.言うまでもなく、それは上から下まで走ります.しかし、あなたがコンソールをチェックするならば、ここで、「私は最初に走らせます」、すなわち、useLayoutEffectが走る前に、useEffectが実際に実行されます.これは、DOMが突然変異された後、ブラウザが新しい変更を塗る前に、useLayoutEffectが同期的に発射されるからです.
さて、どのように動作するかをよりよく理解するために、変更に気付きたいです.useRef反応フックでDOM要素を参照しましょう、そして、我々が話していた2つの副作用フックで若干の変化をしましょう
import React, {useRef, useEffect, useLayoutEffect) from 'react'

const App = () => {
  const inputRef = useRef(null)
  useEffect(()=>{
    inputRef.current.value = "another user"
  });

  useLayoutEffect(()=>{
    console.log(inputRef.current.value)

  });
  return(
    <div>
      <input type="text" value="EmmanuelTheCoder" ref= 
        {inputRef}/>
    </div>
  );
}
export default App;

コンポーネントがレンダリングされると、入力値は“別のユーザー”になりますが、コンソールは“emmanuelthecoder”と言います.
ブラウザが「別のユーザ」をペイントする前に、USELAyouteffectはDOM突然変異の後に同期して既に発火しました
あなたがそれを得たことを願っています.
ちょっと待って、もう一つ!
反応18はuseEffectフックにいくつかの本当に良い更新をもたらした.
Reply 18から起動すると、UseEffectsに渡された関数は、レイアウトやペイントの前に同期して発火し、クリックのような離散的なユーザー入力の結果である場合、または更新されたときに更新されます.この動作により、イベントシステムによって、または呼び出し元によってその結果が観測されます.
あなたが反応18について知らないIncaseについて、私は詳細にそれを詳細に説明するこのブログの記事を出すでしょう、加えて、新しく加えられたフック.
読書ありがとう.