React: 質問:useRefの代わりにuseMemoを使用できますか?

作成日 2020年02月03日  ·  3コメント  ·  ソース: facebook/react

こんにちは、好奇心から、次のように行う場合、 useRef代わりにuseMemoを使用できます。

例:

const ref = useRef(null);
const ref2 = useMemo(() => { current: null }, []);

どちらの参照も、DOM参照としても、クラスのインスタンスフィールドと同様に変更可能な値としても、問題なく機能するように見えます。 useRefuseMemo ReactFiberHooks.jsコードを考慮すると、 useRefuseMemoとは異なる方法で実装されるのはなぜですか?

ありがとう!

Invalid Question

最も参考になるコメント

この方法でrefオブジェクトを作成することもできますが、 useMemoも依存関係を追跡および比較するため、効率が低下します。 (空の依存関係配列を指定した場合でも、メモフックの基になるデータ構造には追加の値のためのスペースがあります。)

これを説明するために、 useRefの実装を比較できます。
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920

useMemo
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156

両方のフックは頻繁に使用されるため、実装が異なるように:smile:を最適に実行することが重要です。

全てのコメント3件

この方法でrefオブジェクトを作成することもできますが、 useMemoも依存関係を追跡および比較するため、効率が低下します。 (空の依存関係配列を指定した場合でも、メモフックの基になるデータ構造には追加の値のためのスペースがあります。)

これを説明するために、 useRefの実装を比較できます。
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920

useMemo
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156

両方のフックは頻繁に使用されるため、実装が異なるように:smile:を最適に実行することが重要です。

この方法でrefオブジェクトを作成することはできますが、 useMemoも依存関係を追跡および比較するため、効率が低下します。 (空の依存関係配列を指定した場合でも、メモフックの基になるデータ構造には追加の値のためのスペースがあります。)

これを説明するために、 useRefの実装を比較できます。
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920

useMemo
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156

両方のフックが頻繁に使用されるため、実装が異なるように最適に機能することが重要です😄。

こんにちは、このようにコードをフォーマットする方法は?
image

@ yaofly2012特定のファイルリビジョンと行番号にリンクする場合、GitHubはそのようにリンクをフォーマットします。

  1. ファイルを開く
  2. 行番号をクリックします
  3. Shiftキーを押しながら別の行番号をクリックして、範囲を選択します
  4. 「y」と入力して、現在のリビジョンに固定します
  5. URLをコピーしてGitHubに貼り付けます
このページは役に立ちましたか?
0 / 5 - 0 評価