Controlled Components e Uncontrolled Components: O que você precisa saber

Saiba a diferença entre Controlled e Uncontrolled Components no React e como utilizá-los em suas aplicações.

Entendendo os Components Controlados e Não Controlados no React

No React, a forma como manipulamos o estado de um componente é fundamental para a construção de interfaces dinâmicas e responsivas. Existem duas abordagens principais para lidar com a entrada do usuário: os Controlled Components e os Uncontrolled Components. Neste tutorial, vamos explorar o que são esses conceitos, como utilizá-los e quando escolher um em detrimento do outro.

O que são Controlled Components?

Os Controlled Components são componentes cujos valores são controlados pelo estado do React. Isso significa que toda vez que o usuário interage com um campo de entrada, o valor desse campo é atualizado no estado do componente, e qualquer alteração é refletida na interface do usuário. Vamos ver um exemplo:

import React, { useState } from 'react';

function ControlledInput() {
    const [value, setValue] = useState('');

    const handleChange = (event) => {
        setValue(event.target.value);
    };

    return (
        <input type="text" value={value} onChange={handleChange} />
    );
}

Nesse exemplo, o valor do campo de entrada é controlado pela variável de estado value. Quando o usuário digita algo, a função handleChange é chamada, atualizando o estado e, consequentemente, o valor do input. Isso garante que o que o usuário vê na tela esteja sempre sincronizado com o estado do componente.

O que são Uncontrolled Components?

Por outro lado, os Uncontrolled Components não controlam seu estado através do React. Em vez disso, eles dependem do DOM para gerenciar seus valores. Isso pode ser útil em algumas situações, como quando você precisa integrar um componente de terceiros que não se adapta bem ao fluxo controlado do React. Veja um exemplo:

import React, { useRef } from 'react';

function UncontrolledInput() {
    const inputRef = useRef(null);

    const handleSubmit = (event) => {
        event.preventDefault();
        alert('Um nome foi enviado: ' + inputRef.current.value);
    };

    return (
        <form onSubmit={handleSubmit}>
            <input type="text" ref={inputRef} />
            <button type="submit">Enviar</button>
        </form>
    );
}

Neste caso, estamos usando useRef para acessar diretamente o valor do input. Ao enviar o formulário, podemos acessar o valor através de inputRef.current.value. Aqui, o React não está gerenciando o estado do componente, o que pode ser mais simples em certos cenários, mas menos integrado ao fluxo do React.

Quando usar Controlled ou Uncontrolled Components?

A escolha entre Controlled e Uncontrolled Components depende do contexto da aplicação. Aqui estão algumas diretrizes:

  • Use Controlled Components quando precisar de validação em tempo real, manipulação do estado ou quando quiser garantir que o valor do campo de entrada esteja sempre sincronizado com o estado do componente.
  • Use Uncontrolled Components quando a simplicidade for mais importante ou quando você estiver lidando com bibliotecas de terceiros que não se integram bem com o React.

Vantagens e Desvantagens

Controlled Components:

  • Vantagens:

  • Maior controle sobre o estado.

  • Facilita a validação de entrada e manipulação de dados.

  • Melhora a integração com o fluxo do React.

  • Desvantagens:

  • Pode ser mais verboso e complexo.

  • Pode ter performance inferior em casos de muitos inputs.

Uncontrolled Components:

  • Vantagens:

  • Mais simples e direto em alguns casos.

  • Ideal para componentes de terceiros.

  • Desvantagens:

  • Menos controle sobre o estado.

  • Dificulta a validação e manipulação de dados em tempo real.

Conclusão

Entender a diferença entre Controlled Components e Uncontrolled Components é crucial para a construção de aplicações React eficientes e responsivas. Ao escolher entre os dois, considere as necessidades da sua aplicação e as interações do usuário. Compreender essas abordagens pode melhorar significativamente a qualidade do seu código e a experiência do usuário.

Os conceitos de Controlled e Uncontrolled Components são fundamentais para quem deseja se aprofundar no desenvolvimento com React. A forma como gerenciamos o estado e a entrada dos usuários impacta diretamente na experiência do usuário e na manutenção do código. Compreender quando e como usar cada abordagem pode fazer a diferença entre uma aplicação simples e uma solução escalável e eficiente.

Algumas aplicações:

  • Formulários dinâmicos.
  • Interações em tempo real.
  • Integração com bibliotecas de UI.
  • Validação de dados.

Dicas para quem está começando

  • Comece sempre com Controlled Components para maior controle.
  • Use Uncontrolled Components quando precisar de simplicidade.
  • Teste suas aplicações para entender qual abordagem funciona melhor para você.
  • Não tenha medo de experimentar ambas as abordagens.

Contribuições de Gabriel Nogueira

Compartilhe este tutorial: O que são 'Controlled Components' e 'Uncontrolled Components' no React?

Compartilhe este tutorial

Continue aprendendo:

Como integrar arquivos estáticos como imagens e fontes em um projeto React?

Aprenda a integrar arquivos estáticos como imagens e fontes em seu projeto React.

Tutorial anterior

Como usar formulários no React corretamente?

Aprenda a criar e gerenciar formulários no React com este guia completo.

Próximo tutorial