useCallback ヘルプ コードはどのようにして高速に実行されるのでしょうか?
P粉924915787
P粉924915787 2023-08-18 10:02:15
0
1
442
<p>useCallback は関数をキャッシュできると言われていますが、その目的はコードの実行を高速化することだと思います。 </p> <p>たとえば、次のような場合: </p> <pre class="brush:js;toolbar:false;"> const handleChange = (ev) => { setMsg(ev.target.value); }; </pre> <p>次のように変更することもできます: </p> <pre class="brush:js;toolbar:false;"> const handleChange = useCallback((ev) => { setMsg(ev.target.value); }、[]); </pre> <p>関数がキャッシュされました。しかし、とにかくコンポーネントを再レンダリングするときにこの関数を作成する必要があるのでしょうか? </p> <p>テストするために、関数が出力されるように IIFE に変更すると、関数が出力されていることが出力されます。 </p> <p>参照: https://codesandbox.io/s/jolly-nightingale-zxqp8k</p> <p>したがって、入力ボックスに何かを入力するたびに、コンソールに表示されているように、新しい関数が出力されます。これは、IIFE が毎回実行されることを意味します。また、IIFE でなくても、関数リテラルが毎回関数オブジェクトに変換されることも意味します。では、このヘルプ コードはどのようにして高速に実行されるのでしょうか? </p>
P粉924915787
P粉924915787

全員に返信(1)
P粉834840856

はい、これは正しいです。レンダリングごとに新しい関数が作成され、キャッシュされた関数に置き換えられます。

高速化は、関数の作成ステップを省略したことによるものではなく、他のコードが独自の作業を省略できるためです。毎回同じ関数が渡されると、関連するものは何も変わっていないことがわかるからです。

たとえば、handleChangeuseEffect の依存関係配列に渡す必要がある場合、毎回安定した参照を渡すことが非常に重要です。そうしないと、エフェクトが毎回渡されてしまいます。レンダリングされる時間。再実行:

リーリー

または、handleChange がプロップとしてコンポーネントに渡され、コンポーネントが React.memo を使用してレンダリングをスキップしたい場合。レンダリングは、プロパティが変更されていない場合にのみスキップできます:

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!