Reduzieren Sie Re-Renderings mit mlyn.

Das Problem: Sie haben eine Anwendung, bei der eine Komponente aktualisiert wird, die in einem ganz anderen Teil der App angezeigt werden soll. Die einfachste Lösung wäre, den Wert durch Ihre Komponentenhierarchie zu „prop-drillen“.

Angenommen, die folgende App:

Es hat nur 4 Komponenten:

  • App : Anwendungscontainer (deklariert den Zustand)
  • A : Schieberegler
  • B : div wo der Wert des Schiebereglers gerendert wird
  • C : Behälter von B

import React, { useState } from "react";
const A = React.memo(({ progress, setProgress }) => {
  return (
    <input
      type="range"
      value={progress}
      onChange={(e) => {setProgress(e.target.value);}}
    />
  );
});
const B = React.memo(({ progress }) => {
  console.log(">>> render B");
  return <div>{progress}</div>;
});
const C = React.memo(({ progress }) => {
  console.log(">>> render C:", progress);
  return (
    <div style={{ padding: 10, backgroundColor: "yellow" }}>
      <B progress={progress} />
    </div>
  );
});
export const App = React.memo(() => {
  const [progress, setProgress] = useState(0);
  console.log(">>> render App");
  return (
    <div>
      <A progress={progress} setProgress={setProgress} />
      <C progress={progress} setProgress={setProgress} />
    </div>
  );
});

Wenn wir den Anzeigewert der Folie in B aktualisieren möchten, geschieht dies bei jedem Update

Mlyn löst dieses Problem durch die Einführung von Proxy-Werten, die Subjekte genannt werden. Sie können diese Themen (oder Teile davon) an Ihre Kinder weitergeben und nur bei Bedarf abonnieren / aktualisieren. Lassen Sie die Migration des obigen Codes in Schritten überprüfen:

export const App = () => {
  const progress$ = useSubject(0);
  console.log(">>> render App");
  return (
    <div>
      <A progress$={progress$} />
      <C progress$={progress$} />
    </div>
  );
};

const A = ({ progress$ }) => {
  const progress = useSubjectValue(progress$);
  return (
    <input
      type="range"
      value={progress}
      onChange={(e) => {
        progress$(e.target.value);
      }}
    />
  );
};

Der Wert des progress$Betreffs kann an andere Komponenten Ihrer App übergeben werden. Es wird jedoch nur die Komponente neu gerendert, in der Sie den Betreff abonniert haben.

const B = ({ progress$ }) => {
  console.log(">>> render B");
  const progress = useSubjectValue(progress$);
  return <div>{progress}</div>;
};
const C = ({ progress$ }) => {
  console.log(">>> render C");
  return (
    <div style={{ padding: 10, backgroundColor: "yellow" }}>
      <B progress$={progress$} />
    </div>
  );
};

Suggested posts

Die verheerenden Folgen eines Schlaganfalls vermeiden: Aus der Reise einer Familie lernen.

Die verheerenden Folgen eines Schlaganfalls vermeiden: Aus der Reise einer Familie lernen.

Einleitung Ein Schlaganfall ist ein medizinischer Notfall, der jeden jederzeit treffen kann. Sie tritt auf, wenn die Durchblutung eines Teils des Gehirns gestört ist, was zu einem plötzlichen Verlust der Gehirnfunktion führt.

Meine am häufigsten verwendeten Codierungsressourcen

Meine am häufigsten verwendeten Codierungsressourcen

Diese Woche erhielt ich eine E-Mail von einem Mitglied der täglichen E-Mail-Liste. Sie wollten wissen: Welche Ressourcen besuchen Sie täglich, wöchentlich und monatlich? Tolle Frage! Ich versuche gerne, einige Einblicke in meinen Arbeitsablauf und die wichtigsten Ressourcen, die ich verwende, mit Ihnen zu teilen.

Related posts

Die „Learning at Work Week“ ist wichtiger als Sie denken

Die „Learning at Work Week“ ist wichtiger als Sie denken

Es fällt uns oft schwer, das umzusetzen, von dem wir wissen, dass es gut für uns ist. Von der Aussage, dass wir einen Lebensgefährten lieben, bis hin zur Erinnerung daran, wie ein Pirat zu reden – es wird immer diejenigen geben, die behaupten, dass ein Tag, eine Woche oder ein Monat voller Ereignisse nicht nötig sei, weil sie diese Dinge bereits tun.

Das erste Buch zum Thema „High“ für Kinder

Das erste Buch zum Thema „High“ für Kinder

(Warnung – das ist Satire, die fröhlich subversiv sein soll – definitiv nichts für Kinder) Sie haben gesehen, wie Ihre Eltern sich in der Küche versteckten und diese stinkenden Zigaretten rauchten. Sie sagen es dir.

Keine Passwörter mehr – wie Passkeys Ihr Passwort ersetzen

Keine Passwörter mehr – wie Passkeys Ihr Passwort ersetzen

Um Unklarheiten zu vermeiden, werden die folgenden Begriffe verwendet: Authentifikator; Das Mobiltelefon, das für die Anmeldung verwendet wird. Website; Die Website oder Anwendung, die der Benutzer verwendet, um den Anmeldeanforderungsdienst zu stellen; Der Anbieter, der die jeweilige Dienstleistung bereitstellt, z

GRENZENLOSES LEBEN

Wenn man erwachsen wird, wird einem oft gesagt, dass die Welt so ist, wie sie ist, und dass das Leben nur darin besteht, sein Leben in der Welt zu leben, niemals sein Leben zu riskieren, einfach einem festgelegten Weg zu folgen und am Ende zu sterben, und versucht, es nicht zu tun Schlage zu viel gegen die Wände. Aber das ist ein sehr begrenztes Leben.