Sobes.tech
Junior

Qual é a diferença entre props e estado no React?

sobes.tech IA

Resposta da IA

Props (propriedades) e estado (state) são dois mecanismos-chave para gerir dados nos componentes React.

Props:

  • São passados do componente pai para o componente filho.
  • São imutáveis dentro do componente filho.
  • Permitem a interação entre componentes.
  • Definem a aparência ou comportamento do componente com base nos dados de entrada.

Estado:

  • Pertence a um componente específico e é gerido por ele.
  • É mutável dentro do componente.
  • Representa dados que podem mudar ao longo do tempo e influenciar a renderização do componente.
  • A alteração do estado provoca a re-renderização do componente e dos seus filhos.

As principais diferenças podem ser apresentadas em forma de tabela:

Característica Props Estado
Fonte Componente pai O próprio componente
Mutabilidade Imutáveis Mutável
Gestão São passadas de fora São geridas dentro do componente
Propósito Mostrar dados externos, configuração Gerir o estado interno do componente
Alteração provoca Re-renderização ao alterar no pai Re-renderização ao alterar no componente atual

Exemplo de uso de props:

// ParentComponent.jsx
import React from 'react';
import ChildComponent from './ChildComponent';

function ParentComponent() {
  const message = "Olá do pai!";
  return (
    <div>
      <ChildComponent text={message} /> {/* Passagem de prop "text" */}
    </div>
  );
}

export default ParentComponent;
// ChildComponent.jsx
import React from 'react';

function ChildComponent(props) {
  return (
    <p>{props.text}</p> {/* Uso da prop "text" */}
  );
}

export default ChildComponent;

Exemplo de uso de estado:

// Counter.jsx
import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0); // Inicialização do estado "count"

  const increment = () => {
    setCount(count + 1); // Alteração do estado
  };

  return (
    <div>
      <p>Contador: {count}</p>
      <button onClick={increment}>Incrementar</button>
    </div>
  );
}

export default Counter;