Dans React, la transmission d'objets aux accessoires déclenchera RE-Rendaring (vous devez utiliser
useMemo
Si possible, la valeur d'origine doit être transmise aux accessoires. React utilise la "comparaison peu profonde" pour détecter toute modification des accessoires et de l'état. Plus précisément, il utilise la syntaxe JavaScript pour comparer. Alors, quel est le résultat du code suivant?
Object.is()
La réponse est ...
<code class="language-javascript">Object.is( { hello: "world" }, { hello: "world" }, );</code>
Bien que les deux objets se ressemblent, l'objet JavaScript est passé en fonction de la référence, ce qui signifie que même s'ils se ressemblent, ils ne sont pas le même objet: ils ont une distribution différente en mémoire. false
, il re-redémencera:
memo
Nous pouvons éviter le re-leringage inutile en utilisant le bon crochet React
<code class="language-javascript">const Parent = () => { const user = { name: "Lee", age: 30 }; return <Child user={user} />; }; // Child 组件重新渲染 const Child = React.memo(({ user }: { user: { name: string; age: number } }) => { console.log("Child 渲染"); return <div>{user.name}</div>; });</code>
useMemo
mais, et
<code class="language-javascript">const Parent = () => { const user = React.useMemo(() => ({ name: "Lee", age: 30 }), []); return <Child user={user} />; };</code>
Passez la valeur d'origine aux accessoires useMemo
useCallback
Dans cet exemple, il n'est pas sans effort de transmettre chaque clé aux accessoires de la composante enfant. Cependant, nous devons parfois traiter de grands objets avec plus de 10 valeurs clés.
Créer d'autres composants (le principe de la responsabilité unique)
<code class="language-javascript">const Parent = () => { const user = { name: "Lee", age: 30 }; return <Child age={user.age} name={user.name} />; };</code>
Si nous suivons le principe solide, nous pouvons envisager de créer plusieurs composants plus petits pour traiter chaque accessoire. Ou, au moins la valeur clé de l'objet est attribuée à plusieurs composants.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!