"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > React: Estado X Estado Derivado

React: Estado X Estado Derivado

Publicado em 2024-11-08
Navegar:309

React: State X Derived State

O que é um estado derivado? Pense em um estado para texto e depois outro para texto maiúsculo.

Estado Derivado

function Foo() {
    const [text, setText] = useState('hello, za warudo!');
    const [uppercaseText, setUppercaseText] = useState(text.toUpperCase());

    useEffect(() => {
        setUppercaseText(text.toUpperCase());
    }, [text])

    ...
}

Colocando assim, é uma loucura pensar que alguém faria isso… certo? CERTO?

Sim, um exemplo como este deixará claro que isso está errado.

O mal do estado derivado

  • Armazenado separadamente e fora de sincronia com o estado real.
  • Os gatilhos (dependem) de novas renderizações desnecessárias.

Como refatorar o estado derivado?

Digamos que é um cálculo caro… a solução é usar useMemo.

function Foo() {
    const [text, setText] = useState('hello, za warudo!');
    const uppercaseText = useMemo(() => text.toUpperCase(), [text]);
    ...
}

Como identificar rapidamente o estado que pode ser derivado?

Eu criei uma boa maneira de pensar que deveria tornar mais fácil SABER se um estado deveria ser “outro estado” ou apenas uma propriedade computada (memorizada ou não dependendo do caso).

function Foo({
    text = 'hello, za warudo!',
    uppercaseText = text.toUpperCase(),
}) {
    ...
}

// Forget react for a moment...
// Would you ever call a function like this?
const text = 'hello, za warudo!';
Foo({
    text,
    uppercaseText: text.toUpperCase(),
});

Se você pensar nesses estados como “adereços”, então isso torna mais flagrantemente o que deveria ser.

Esqueça totalmente o React, pense apenas nas funções:
Você chamaria uma função com uma variável e depois outra variável que você pudesse calcular dentro?

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/noriller/react-state-x-derived-state-2d2a?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3