Maison  >  Questions et réponses  >  le corps du texte

Pourquoi refaire le rendu sans changer les accessoires ou l'état ?

<p>Nous avons une application très simple qui contient simplement un <code>useEffect</code>, qui contient un <code>console.log("first")</code>. Le problème est que je veux que <code>console.log("first")</code> ne s'imprime qu'une fois lors de l'exécution, mais je ne sais pas pourquoi le nouveau rendu se produit et il s'imprime deux fois. S'il vous plaît, guidez-moi, merci. </p> <pre class="brush:php;toolbar:false;">exporter la fonction par défaut App() { useEffect(() => { console.log("premier"); }, []); retour ( <div className="Application"> <h1>Bonjour CodeSandbox</h1> <h2>Commencez le montage pour voir un peu de magie opérer !</h2> </div> ); }</pré> <p>https://codesandbox.io/s/silly-kilby-yn38cj?file=/src/App.tsx</p>
P粉786800174P粉786800174406 Il y a quelques jours503

répondre à tous(1)je répondrai

  • P粉821274260

    P粉8212742602023-08-14 10:16:44

    Il s'agit d'une nouvelle fonctionnalité du mode strict de React 18 et ce comportement est intentionnel. La raison principale de cette nouvelle fonctionnalité est de rappeler aux développeurs d'ajouter des fonctions de nettoyage dans les fonctions de traitement des effets. Donc, fondamentalement, le composant sera monté deux fois, ce qui signifie qu'il est monté, démonté et remonté. Cependant, il est important de savoir que ce comportement n’est observé qu’en mode développement et ne se produit pas dans les versions de production. Pour vérifier le comportement en mode développement, ajoutez une fonction de nettoyage à votre gestionnaire d'effets et essayez de consigner quelque chose. Par exemple :

    export default function App() {
      useEffect(() => {
        console.log("first");
    
        return () => console.log("Unmount App");
      }, []);
    
      return (
        <div className="App">
          <h1>Hello CodeSandbox</h1>
          <h2>Start editing to see some magic happen!</h2>
        </div>
      );
    }

    Maintenant, l'ordre des journaux ressemblera à ceci :

    first
    Unmount App
    first

    De cette façon, les développeurs peuvent garantir que les composants ne sont pas sujets aux erreurs et effectuer un nettoyage approprié lorsque les composants sont désinstallés. Pour mieux comprendre cela, vous pouvez vous référer à cet exemple démontré dans la documentation. Si vous souhaitez en savoir plus sur le travail de nettoyage dans la fonction de gestionnaire d'effets, veuillez vous référer à cet article.

    répondre
    0
  • Annulerrépondre