React: Question: Peut-on utiliser useMemo à la place de useRef?

Créé le 3 févr. 2020  ·  3Commentaires  ·  Source: facebook/react

Salut, juste par curiosité, vous pouvez utiliser useMemo au lieu de useRef en procédant comme suit:

Exemple:

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

Il me semble que les deux références fonctionneront très bien en tant que référence DOM et en tant que valeur mutable similaire aux champs d'instance dans les classes. Pourquoi alors useRef est implémenté différemment par rapport à useMemo compte tenu du code useRef et useMemo ?

Merci!

Invalid Question

Commentaire le plus utile

Vous pouvez créer un objet ref de cette façon, mais ce serait moins efficace puisque useMemo suit et compare également les dépendances. (Même si vous spécifiez un tableau de dépendances vide, la structure de données sous-jacente d'un crochet mémo a de l'espace pour la valeur supplémentaire.)

Pour illustrer cela, vous pouvez comparer l'implémentation de 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

Étant donné que les deux crochets sont fréquemment utilisés, il est important qu'ils fonctionnent de manière optimale: sourire: ils sont donc implémentés différemment.

Tous les 3 commentaires

Vous pouvez créer un objet ref de cette façon, mais ce serait moins efficace puisque useMemo suit et compare également les dépendances. (Même si vous spécifiez un tableau de dépendances vide, la structure de données sous-jacente d'un crochet mémo a de l'espace pour la valeur supplémentaire.)

Pour illustrer cela, vous pouvez comparer l'implémentation de 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

Étant donné que les deux crochets sont fréquemment utilisés, il est important qu'ils fonctionnent de manière optimale: sourire: ils sont donc implémentés différemment.

Vous _pourriez_ créer un objet ref de cette façon, mais ce serait moins efficace puisque useMemo suit et compare également les dépendances. (Même si vous spécifiez un tableau de dépendances vide, la structure de données sous-jacente d'un crochet mémo a de l'espace pour la valeur supplémentaire.)

Pour illustrer cela, vous pouvez comparer l'implémentation de 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

Étant donné que les deux hooks sont fréquemment utilisés, il est important qu'ils fonctionnent de manière optimale 😄 afin qu'ils soient implémentés différemment.

salut, comment formater le code comme ça?
image

@ yaofly2012 GitHub formate les liens de cette façon, si vous

  1. Ouvrir un fichier
  2. Cliquez sur un numéro de ligne
  3. Maintenez SHIFT et cliquez sur un autre numéro de ligne pour sélectionner une plage
  4. Tapez "y" pour épingler la révision actuelle
  5. Copiez et collez l'URL sur GitHub
Cette page vous a été utile?
0 / 5 - 0 notes