Introdução aos React Hooks

ReactReactBeginner
Pratique Agora

This tutorial is from open-source community. Access the source code

💡 Este tutorial foi traduzido do inglês com assistência de IA. Para ver o original, você pode mudar para a versão em inglês

Introdução

Bem-vindo à documentação do React! Este laboratório (lab) fornecerá uma introdução ao uso de hooks.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 100%. Recebeu uma taxa de avaliações positivas de 89.47% dos estudantes.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) react(("React")) -.-> react/StateManagementGroup(["State Management"]) react/FundamentalsGroup -.-> react/jsx("JSX") react/FundamentalsGroup -.-> react/components_props("Components and Props") react/FundamentalsGroup -.-> react/event_handling("Handling Events") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StateManagementGroup -.-> react/use_state_reducer("Using useState and useReducer") subgraph Lab Skills react/jsx -.-> lab-100375{{"Introdução aos React Hooks"}} react/components_props -.-> lab-100375{{"Introdução aos React Hooks"}} react/event_handling -.-> lab-100375{{"Introdução aos React Hooks"}} react/hooks -.-> lab-100375{{"Introdução aos React Hooks"}} react/use_state_reducer -.-> lab-100375{{"Introdução aos React Hooks"}} end

Usando Hooks

O projeto React já foi fornecido na VM. Em geral, você só precisa adicionar código ao App.js.

Por favor, use o seguinte comando para instalar as dependências:

npm i

Funções que começam com use são chamadas de Hooks. useState é um Hook embutido fornecido pelo React. Você pode encontrar outros Hooks embutidos na referência da API. Você também pode escrever seus próprios Hooks combinando os existentes.

Hooks são mais restritivos do que outras funções. Você só pode chamar Hooks no topo de seus componentes (ou outros Hooks). Se você quiser usar useState em uma condição ou um loop, extraia um novo componente e coloque-o lá.

No exemplo anterior, cada MyButton tinha seu próprio count independente, e quando cada botão era clicado, apenas o count do botão clicado mudava:

Not using hooks

No entanto, muitas vezes você precisará que os componentes compartilhem dados e sempre atualizem juntos.

Para fazer com que ambos os componentes MyButton exibam o mesmo count e atualizem juntos, você precisa mover o estado dos botões individuais "para cima" para o componente mais próximo que os contém.

Neste exemplo, é o MyApp:

Using hooks

Agora, quando você clicar em qualquer botão, o count em MyApp mudará, o que mudará ambos os count em MyButton. Veja como você pode expressar isso em código.

Primeiro, mova o estado de MyButton para MyApp:

// App.js
export default function MyApp() {
  const [count, setCount] = useState(0);

  function handleClick() {
    setCount(count + 1);
  }

  return (
    <div>
      <h1>Counters that update separately</h1>
      <MyButton />
      <MyButton />
    </div>
  );
}

function MyButton() {
  // ... we're moving code from here ...
}

Em seguida, passe o estado de MyApp para cada MyButton, juntamente com o manipulador de clique compartilhado. Você pode passar informações para MyButton usando as chaves JSX, assim como você fez anteriormente com tags embutidas como <img>:

export default function MyApp() {
  const [count, setCount] = useState(0);

  function handleClick() {
    setCount(count + 1);
  }

  return (
    <div>
      <h1>Counters that update together</h1>
      <MyButton count={count} onClick={handleClick} />
      <MyButton count={count} onClick={handleClick} />
    </div>
  );
}

As informações que você passa dessa forma são chamadas de props. Agora, o componente MyApp contém o estado count e o manipulador de eventos handleClick, e passa ambos como props para cada um dos botões.

Finalmente, altere MyButton para ler as props que você passou de seu componente pai:

function MyButton({ count, onClick }) {
  return <button onClick={onClick}>Clicked {count} times</button>;
}

Quando você clica no botão, o manipulador onClick é acionado. A prop onClick de cada botão foi definida para a função handleClick dentro de MyApp, então o código dentro dela é executado. Esse código chama setCount(count + 1), incrementando a variável de estado count. O novo valor de count é passado como uma prop para cada botão, então todos eles mostram o novo valor. Isso é chamado de "elevar o estado" ("lifting state up"). Ao mover o estado para cima, você o compartilhou entre os componentes.

import { useState } from "react";

export default function MyApp() {
  const [count, setCount] = useState(0);

  function handleClick() {
    setCount(count + 1);
  }

  return (
    <div>
      <h1>Counters that update together</h1>
      <MyButton count={count} onClick={handleClick} />
      <MyButton count={count} onClick={handleClick} />
    </div>
  );
}

function MyButton({ count, onClick }) {
  return <button onClick={onClick}>Clicked {count} times</button>;
}

Para executar o projeto, use o seguinte comando. Em seguida, você pode atualizar a aba Web 8080 para visualizar a página web.

npm start

Resumo

Parabéns! Você concluiu o laboratório (lab) Usando Hooks. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.

OSZAR »