O problema: você tem um aplicativo em que um componente é atualizado e deve ser exibido em uma parte totalmente diferente do aplicativo. A solução mais simples seria "perfurar" o valor por meio da hierarquia de seus componentes.
Suponha o seguinte aplicativo:
Possui apenas 4 componentes:
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 quisermos atualizar o valor de exibição do slide em B , isso é o que acontecerá em cada atualização
Mlyn resolve esse problema introduzindo valores de proxy chamados assuntos. Você pode passar esses assuntos (ou partes deles) para seus filhos e se inscrever / atualizar apenas quando necessário. Vamos revisar a migração do código acima por etapas:
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);
}}
/>
);
};
O valor do progress$assunto pode ser passado por outros componentes do seu aplicativo. No entanto, apenas o componente no qual você se inscreveu no assunto será renderizado novamente.
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>
);
};
Introdução O AVC é uma emergência médica que pode atingir qualquer pessoa a qualquer momento. Ocorre quando o fluxo sanguíneo para uma parte do cérebro é interrompido, levando a uma perda repentina da função cerebral.
Esta semana, recebi um e-mail de um membro da lista de e-mails diários. Eles queriam saber: quais recursos você visita diariamente, semanalmente e mensalmente? Ótima pergunta! Fico feliz em tentar compartilhar algumas ideias sobre meu fluxo de trabalho e os principais recursos que uso.
Se quisermos continuar a prosperar neste planeta, teremos que ter conversas perigosas. Aqueles que desafiam o que temos feito, o que estamos fazendo e o que estamos determinados a continuar fazendo (ou planejamos fazer).
Para evitar ambigüidade, os seguintes termos serão usados; Autenticador; O celular que está sendo utilizado para fazer o login no Site; O site ou aplicativo que o usuário está usando para fazer a solicitação de login do Serviço; O fornecedor que fornece o serviço fornecido, por exemplo
Passava da meia-noite quando Hayden levou Katie de volta ao dormitório da faculdade depois da noite juntos. Ela tinha aula cedo de manhã e não tinha outra troca de roupa depois de ter ficado com ele na noite anterior.
Quando você cresce, tende a ouvir que o mundo é do jeito que é e sua vida é apenas viver sua vida dentro do mundo, nunca arriscando sua vida, apenas siga um caminho definido e morra no final, e tente não bater demais nas paredes. Mas essa é uma vida muito limitada.