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!
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?
@ yaofly2012 GitHub formate les liens de cette façon, si vous
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.