Il problema: hai un'applicazione, in cui uno stato di aggiornamento del componente, che dovrebbe essere visualizzato in una parte assolutamente diversa dell'app. La soluzione più semplice sarebbe quella di "esercitare" il valore attraverso la gerarchia dei componenti.
Supponiamo che la seguente app:
Ha solo 4 componenti:
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>
);
});
Se vogliamo aggiornare il valore di visualizzazione della diapositiva in B , questo è ciò che accadrà ad ogni aggiornamento
Mlyn risolve questo problema introducendo valori proxy chiamati soggetti. Puoi passare quei soggetti (o parti di essi) ai tuoi figli e iscriverti / aggiornare solo dove necessario. Esaminiamo la migrazione del codice sopra per passaggi:
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);
}}
/>
);
};
Il valore progress$dell'oggetto può essere passato attraverso altri componenti della tua app. Tuttavia, verrà riprodotto solo il componente in cui ti sei abbonato all'oggetto.
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>
);
};
Introduzione Un ictus è un'emergenza medica che può colpire chiunque in qualsiasi momento. Si verifica quando il flusso sanguigno verso una parte del cervello viene interrotto, portando a un'improvvisa perdita della funzione cerebrale.
Questa settimana ho ricevuto un'e-mail da un membro della mailing list quotidiana. Volevano sapere: quali risorse visiti giornalmente, settimanalmente e mensilmente? Ottima domanda! Sono felice di provare a condividere alcune informazioni sul mio flusso di lavoro e sulle migliori risorse che utilizzo.
Di Alyson Lee, consulente per gli affari governativi Il processo di stanziamento annuale del governo federale è fondamentale per i nostri sforzi per finanziare la rimozione dell'anidride carbonica (CDR). Ogni anno, Carbon180 invia richieste a vari uffici congressuali per aiutare a guidare dove fluiranno i dollari del prossimo anno.
Introduzione:Benvenuti, coraggiosi lettori, in un viaggio che ci porterà nelle profondità più oscure del nostro pianeta. In questo blog, ci addentriamo nel mondo enigmatico della Fossa delle Marianne, scoprendo i suoi segreti nascosti e scoprendo le verità agghiaccianti che giacciono sotto la sua superficie.
Quando cresci tendi a sentirti dire che il mondo è così com'è e che la tua vita è vivere la tua vita dentro il mondo, senza mai rischiare la vita, basta seguire un percorso prestabilito e morire alla fine, e cercare di non farlo sfondare troppo i muri. Ma questa è una vita molto limitata.
Nel mondo iperconnesso di oggi, i sistemi dei media svolgono un ruolo fondamentale nel plasmare l'opinione pubblica e, di conseguenza, nel processo decisionale democratico. Nella sua profonda analisi dell'economia politica della comunicazione, lo studioso Robert McChesney sfida la saggezza convenzionale e presenta quelle che definisce le "cinque verità" sui media.