Tutorial ReactJS para iniciantes

โšก Resumo Inteligente

ReactJS รฉ a base das interfaces de usuรกrio de inรบmeros sites e aplicativos mรณveis modernos. Esta pรกgina explica o que รฉ a biblioteca, como configurรก-la e como componentes, JSX, estado, propriedades e eventos funcionam em conjunto.

  • โš›๏ธ Foundation: ReactJS รฉ uma linguagem de cรณdigo aberto baseada em componentes. JavaBiblioteca de scripts criada no Facebook (agora Meta) para construir interfaces de usuรกrio rรกpidas e interativas.
  • ๐Ÿงฉ Componentes: Blocos de construรงรฃo reutilizรกveis, escritos como funรงรตes ou classes, dividem a lรณgica da interface do usuรกrio em partes independentes e de fรกcil manutenรงรฃo.
  • ๐Ÿ“ JSX: A JavaA extensรฃo de sintaxe de script permite escrever marcaรงรฃo e expressรตes semelhantes a HTML dentro do mesmo arquivo.
  • ๐Ÿ”„ Estado e Propostas: O estado armazena dados privados e mutรกveis โ€‹โ€‹dentro de um componente, enquanto as propriedades passam dados somente leitura para ele.
  • โš™๏ธ Caminhos de configuraรงรฃo: As tags de script CDN sรฃo adequadas para experimentos rรกpidos; pacotes npm ou Vite sรฃo adequados para projetos reais.
  • ๐Ÿš€ Prรกtica Moderna: Componentes funcionais com Hooks e a API createRoot do React 18+ agora sรฃo o padrรฃo recomendado.
  • ๐Ÿ’ผ Impacto na carreira: O conhecimento de React continua entre as habilidades mais requisitadas em anรบncios de vagas para desenvolvedores front-end em todo o mundo.

Tutorial de ReactJS para Iniciantes: Aprenda o bรกsico de React passo a passo

O que รฉ ReactJS?

ReactJS รฉ um front-end de cรณdigo aberto JavaBiblioteca de scripts para construรงรฃo de interfaces de usuรกrio. ReactJS ร‰ mantido pela Meta (antiga Facebook) e por uma comunidade de desenvolvedores e empresas. ร‰ amplamente utilizado como base para a criaรงรฃo de aplicativos de pรกgina รบnica e aplicativos mรณveis. ร‰ muito fรกcil de usar e permite que os usuรกrios criem componentes de interface do usuรกrio reutilizรกveis.

Antes de escrever sua primeira linha de cรณdigo React, รฉ รบtil saber o que diferencia a biblioteca do React puro. JavaRoteiro. A prรณxima seรงรฃo descreve suas principais funcionalidades.

Recursos do ReactJS

JSX: JSX รฉ uma extensรฃo para JavaScript. Embora o uso de JSX no React nรฃo seja obrigatรณrio, รฉ um dos seus recursos interessantes e fรกceis de usar.

ComponentesOs componentes sรฃo como puros JavaFunรงรตes de script ajudam a simplificar o cรณdigo, dividindo a lรณgica em cรณdigo independente e reutilizรกvel. Podemos usar componentes como funรงรตes e componentes como classes. Os componentes tambรฉm possuem estado e propriedades, o que facilita o desenvolvimento. Dentro de um componente de classe, o estado e as propriedades sรฃo gerenciados.

DOM virtual: O React cria um DOM virtual, ou seja, um cache de estrutura de dados na memรณria. Somente as alteraรงรตes finais sรฃo posteriormente atualizadas no DOM do navegador, o que mantรฉm a renderizaรงรฃo rรกpida.

JavaExpressรตes de script: Expressรตes JS podem ser usadas em arquivos JSX utilizando chaves, por exemplo, {}.

Vantagens do ReactJS

Aqui estรฃo as principais vantagens/benefรญcios de usar ReactJS:

  • ReactJS utiliza um DOM virtual que faz uso de um cache de estrutura de dados na memรณria, e apenas as alteraรงรตes finais sรฃo atualizadas no DOM do navegador. Isso torna o aplicativo mais rรกpido.
  • Vocรช pode criar componentes de sua escolha usando o recurso de componentes do React. Os componentes podem ser reutilizados e tambรฉm sรฃo รบteis na manutenรงรฃo do cรณdigo.
  • ReactJS รฉ um software de cรณdigo aberto. JavaBiblioteca de scripts, por isso รฉ fรกcil comeรงar a usรก-la.
  • ReactJS tornou-se muito popular em um curto perรญodo e รฉ a base de produtos como o Facebook e Instagramร‰ utilizado por muitas empresas famosas como a Apple, Netflix, etc.
  • A Meta mantรฉm a biblioteca ReactJS, por isso ela รฉ bem mantida e atualizada.
  • ReactJS pode ser usado para desenvolver UI rica para aplicativos desktop e mรณveis.
  • Fรกcil de depurar e testar, pois a maior parte da codificaรงรฃo รฉ feita em JavaScript em vez de em HTML.

Desvantagens do ReactJS

Aqui estรฃo as desvantagens/contras de usar ReactJS:

  • A maior parte do cรณdigo รฉ escrita em JSX, ou seja, HTML e CSS fazem parte do... JavaScript. Pode ser bastante confuso, jรก que a maioria das outras estruturas prefere keeping HTML separado do JavaCรณdigo de script.
  • O tamanho dos arquivos do ReactJS รฉ comparativamente grande.

Conhecendo as vantagens e desvantagens, vocรช estรก pronto para configurar o React. A maneira mais rรกpida de experimentรก-lo รฉ diretamente de uma CDN, que abordaremos primeiro; configuraรงรตes baseadas em npm para projetos reais serรฃo apresentadas a seguir.

Usando ReactJS do CDN

Para comeรงar a trabalhar com React, primeiro precisamos adicionar o ReactJS ร  nossa pรกgina. Vocรช pode comeรงar a usar o ReactJS facilmente com a CDN. JavaArquivos de script, conforme mostrado abaixo.

Acesse o site de documentaรงรฃo legado do React para obter os links do CDN, por exemplo: https://legacy.reactjs.org/docs/cdn-links.htmlE vocรช receberรก os arquivos necessรกrios, conforme explicado na imagem a seguir.

Usando ReactJS a partir de uma CDN - Pรกgina de links da CDN para a documentaรงรฃo do React

Para desenvolvedores

<script crossorigin src="https://unpkg.com/react@version/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@version/umd/react-dom.development.js"></script>

Para produรงรฃo

<script crossorigin src="https://unpkg.com/react@version/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@version/umd/react-dom.production.min.js"></script>

Substituir versรฃo com a versรฃo do React que vocรช desejar, tanto para react.development.js quanto para react-dom.development.js. Nesta pรกgina, usamos a versรฃo 16, portanto, os exemplos abaixo serรฃo executados sem alteraรงรตes.

๐Ÿ’ก Nota: Essas compilaรงรตes UMD/CDN sรฃo uma abordagem legada que funciona atรฉ o React 18 e ainda รฉ adequada para aprendizado. O React 19 nรฃo inclui mais compilaรงรตes UMD, e o React 18+ as substituiu. ReactDOM.render com as createRoot โ€” veja a seรงรฃo sobre versรตes do React perto do final desta pรกgina.

Caso vocรช planeje usar os arquivos da CDN, certifique-se de manter o atributo `crossorigin` para evitar problemas de domรญnio cruzado. O cรณdigo ReactJS nรฃo pode ser executado diretamente no navegador e precisa ser transpilado usando o Babel para cรณdigo nativo. JavaScript antes de ser executado no navegador.

Aqui estรก o script BabelJS que pode ser usado:

<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>

Aqui estรก um exemplo funcional de ReactJS usando arquivos CDN e o script BabelJS.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Hello World</title>
    <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
  </head>
  <body>
    <div id="app"></div>
    <script type="text/babel">
      ReactDOM.render(
        <h1>Hello, from Guru99 Tutorials!</h1>,
        document.getElementById('app')
      );
   </script>
  </body>
</html>

Saรญda:

Saรญda "Olรก Mundo" do exemplo ReactJS baseado em CDN.

Vamos nos aprofundar nos detalhes do cรณdigo no prรณximo capรญtulo; vamos ver como funciona com arquivos CDN. Usar o script Babel diretamente nรฃo รฉ uma boa prรกtica, e iniciantes devem usรก-lo apenas para aprender ReactJS por enquanto. Em produรงรฃo, vocรช precisarรก instalar o React usando o pacote npm.

Usando pacotes NPM

Certifique-se de ter o Node.js instalado. Caso contrรกrio, siga este tutorial para Node.js (https://www.guru99.com/node-js-tutorial.html) instalaรงรฃo.

Apรณs instalar o Node.js, crie uma pasta. reactproj/.

Para comeรงar com a configuraรงรฃo do projeto, execute o comando inicializaรงรฃo npm.

A estrutura de pastas ficarรก assim:

reactproj\
package.json

Agora vamos instalar os pacotes que precisamos.

Aqui estรก a lista de pacotes para ReactJS. Mantemos o React na versรฃo 16, entรฃo... ReactDOM.render Os exemplos nesta pรกgina funcionam exatamente como mostrado:

npm install react@16 --save
npm install react-dom@16 --save
npm install react-scripts --save

Abra o prompt de comando e execute os comandos acima dentro da pasta reactproj/.

Crie uma pasta src / Onde todo o cรณdigo JS serรก inserido. Todo o cรณdigo do projeto ReactJS estarรก disponรญvel na pasta src/. Crie um arquivo index.js e importe react e react-dom, como mostrado abaixo.

index.js

import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(
<h1>Hello, from Guru99 Tutorials!</h1>,
    document.getElementById('root')
);

Jรก escrevemos o cรณdigo bรกsico para ReactJS. Explicaremos os detalhes no prรณximo capรญtulo. Queremos exibir Olรก, de Guru99 tutoriaisE o mesmo รฉ atribuรญdo ao elemento DOM com o id โ€œrootโ€. Ele รฉ obtido do arquivo index.html, que รฉ o arquivo inicial, como mostrado abaixo.

Crie uma pasta chamada public/ e adicione o arquivo index.html dentro dela, conforme mostrado abaixo.

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>ReactJS Demo</title>
  </head>
  <body>
    <div id = "root"></div>
   </body>
</html>

O pacote react-scripts se encarregarรก de compilar o cรณdigo e iniciar o servidor para exibir o arquivo HTML, ou seja, index.html. Vocรช precisa adicionar o comando no package.json que usarรก o react-scripts para compilar o cรณdigo e iniciar o servidor, conforme mostrado abaixo:

 "scripts": {
    "start": "react-scripts start"
  }

Depois de instalar todos os pacotes e adicionar o comando acima, o package.json final รฉ o seguinte:

Pacote.json

{
  "name": "reactproj",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "react-scripts start"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "react": "^16.9.0",
    "react-dom": "^16.9.0",
    "react-scripts": "^3.1.1"
  }
}

Para comeรงar a testar o ReactJS, execute o comando:

npm run start
C:\reactproj>npm run start
> reactproj@1.0.0 start C:\reactproj
> react-scripts start

Isso abrirรก o navegador com o URL http://localhost:3000/ como mostrado abaixo:

public / index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>ReactJS Demo</title>
  </head>
  <body>
    <div id = "root"></div>
  </body>
</html>

Saรญda do navegador apรณs executar o projeto React baseado em npm.

Vamos usar o mesmo processo para executar o JavaOs arquivos de script tambรฉm serรฃo abordados nos prรณximos capรญtulos. Adicione todos os seus arquivos .js e .jsx na pasta src/. A estrutura de arquivos serรก a seguinte:

reactproj/
	 src/
	    index.js
	 node_modules/
	 public/
                index.html
	 package.json

Como criar a configuraรงรฃo do seu primeiro projeto React

Aqui estรก um guia passo a passo neste tutorial de ReactJS para vocรช comeรงar a criar seu primeiro aplicativo React.

Passo 1) Importe os pacotes react.
1. Para comeรงar com ReactJS, precisamos primeiro importar os pacotes react da seguinte maneira.

import React from 'react';
import ReactDOM from 'react-dom';

2. Salve o arquivo como index.js na pasta src/.

Passo 2) Escreva de forma simples. Code.
Escreveremos um cรณdigo simples neste tutorial React JS, onde exibiremos a mensagem โ€œOlรก, de Guru99 tutoriais!

ReactDOM.render(

<h1>Hello, from Guru99 Tutorials!</h1>,
    document.getElementById('root')
);

ReactDOM.render adicionarรก o Adicione a tag ao elemento com o id root. Aqui estรก o arquivo HTML que temos:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>ReactJS Demo</title>
  </head>
  <body>
    <div id = "root"></div>
  </body>
</html>

Passo 3) Compile o Code.

A seguir neste tutorial React.js, precisamos compilar o cรณdigo para obter a saรญda no navegador.

Aqui estรก a estrutura de pastas:

reactproj/
     node_modules/
     src/
       index.js
     package.json
     public/
          index.html

Adicionamos os comandos para compilar o arquivo final em package.json da seguinte forma:

"scripts": {
    "start": "react-scripts start"
  },

Para compilar o arquivo final, execute o seguinte comando:

npm run start

Ao executar o comando acima, os arquivos serรฃo compilados e vocรช serรก notificado caso haja algum erro. Se tudo estiver correto, o navegador serรก aberto e a pรกgina serรก executada em http://localhost:3000/

Comando: npm run start:

C:\reactproj>npm run start

> reactproj@1.0.0 start C:\reactproj
> react-scripts start

Passo 4) Verifique a saรญda.
As URL http://localhost:3000 Serรก aberto no navegador assim que o cรณdigo for compilado, conforme mostrado abaixo:

Resultado do primeiro projeto React no navegador

Como configurar o React com o Vite (abordagem moderna)

A configuraรงรฃo do react-scripts acima vem do Create React App (CRA), que foi o modelo inicial padrรฃo por anos. A equipe do React oficialmente descontinuou o Create React App em fevereiro de 2025, portanto, novos projetos devem usar uma ferramenta de compilaรงรฃo moderna. A opรงรฃo mais popular hoje รฉ o React Native. parafuso, que inicia mais rรกpido e produz builds menores.

Veja como criar um novo projeto React com o Vite:

Passo 1) Execute o comando de scaffolding no seu terminal:

npm create vite@latest my-react-app -- --template react

Passo 2) Acesse a pasta e instale as dependรชncias:

cd my-react-app
npm install

Passo 3) Inicie o servidor de desenvolvimento:

npm run dev

A Vite disponibiliza o aplicativo em http://localhost:5173/ Por padrรฃo, ele recarrega instantaneamente ao salvar um arquivo.

Principais diferenรงas em relaรงรฃo ร  configuraรงรฃo anterior nesta pรกgina:

  • O arquivo de entrada รฉ src/main.jsx em vez de src/index.js.
  • Ele instala a versรฃo mais recente do React, que usa criarRaiz em vez de ReactDOM.render.
  • O arquivo index.html estรก localizado na raiz do projeto, nรฃo em public/.
  • As compilaรงรตes sรฃo produzidas com npm run build em uma pasta dist/.

Para necessidades de pilha completa, como roteamento e renderizaรงรฃo no servidor, a equipe do React tambรฉm recomenda frameworks como Prรณximo.jsTudo o que vocรช aprender nos capรญtulos abaixo โ€” JSX, componentes, estado e propriedades โ€” aplica-se sem alteraรงรตes em um projeto Vite ou Next.js.

O que รฉ JSX?

JSX รฉ uma extensรฃo para JavaScript. ร‰ um script modelo onde vocรช terรก o poder de usar HTML e JavaEscrevam o roteiro juntos.

Aqui estรก um exemplo simples de cรณdigo JSX.

const h1tag = "<h1>Hello, from Guru99 Tutorials!</h1>";

Por que precisamos de JSX no React?

Para uma interface de usuรกrio, precisamos de HTML, e cada elemento no DOM terรก eventos a serem tratados, mudanรงas de estado, etc.

No caso do React, ele nos permite utilizar HTML e JavaCrie um script no mesmo arquivo e lide com as mudanรงas de estado no DOM de maneira eficiente.

Expressรตes em JSX

Aqui estรก um exemplo simples de como usar expressรตes em JSX.

Em exemplos anteriores do ReactJS, tรญnhamos escrito algo como:

index.js

import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(
<h1>Hello, from Guru99 Tutorials!</h1>,
    document.getElementById('root')
);

Agora vamos alterar o cรณdigo acima para adicionar expressรตes. Expressรตes sรฃo usadas dentro de chaves {} e sรฃo expandidas em tempo de execuรงรฃo. Expressรตes em React sรฃo semelhantes a JavaExpressรตes de script.

index.js

import React from 'react';
import ReactDOM from 'react-dom';

const display = "Hello, from Guru99 Tutorials!";
const h1tag = "<h1>{display}</h1>";
ReactDOM.render(
    h1tag,
    document.getElementById('root')
);

Vamos agora testar o mesmo no navegador.

Expressรตes em JSX - saรญda de expressรฃo nรฃo substituรญda no navegador

Como vocรช pode ver na captura de tela acima, a expressรฃo {display} nรฃo รฉ substituรญda. O React nรฃo sabe o que fazer quando uma expressรฃo รฉ usada dentro de um arquivo .js.

Vamos agora adicionar alteraรงรตes e criar um arquivo .jsx, conforme mostrado abaixo:

teste.jsx

import React from 'react';
import ReactDOM from 'react-dom';

const display = "Hello, to Guru99 Tutorials";
const h1tag =<h1>{display}</h1>;
export default h1tag;

Adicionamos o cรณdigo necessรกrio e usaremos o arquivo test.jsx em index.js. Queremos o h1tag A variรกvel deve ser usada dentro do arquivo index.js, portanto, ela รฉ exportada conforme mostrado acima no arquivo test.jsx.

Segue o cรณdigo modificado em index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import h1tag from './test.jsx';

ReactDOM.render(
    h1tag,
    document.getElementById('root')
);

Para usar o arquivo test.jsx no arquivo index.js, primeiro precisamos importรก-lo, como mostrado abaixo:

import h1tag from './test.jsx';

Podemos usar o h1tag agora no ReactDOM.render conforme mostrado abaixo:

ReactDOM.render(
    h1tag,
    document.getElementById('root')
);

Aqui estรก o resultado quando verificamos o mesmo no navegador:

Expressรฃo JSX renderizada corretamente no navegador

O que sรฃo componentes no ReactJS?

Os componentes sรฃo como puros JavaFunรงรตes de script que ajudam a simplificar o cรณdigo, dividindo a lรณgica em cรณdigo independente e reutilizรกvel.

Componentes como funรงรตes

teste.jsx

import React from 'react';
import ReactDOM from 'react-dom';
function Hello() {
    return <h1>Hello, from Guru99 Tutorials!</h1>;
}
const Hello_comp = <Hello />;
export default Hello_comp;

Criamos uma funรงรฃo chamada Olรก que retorna uma tag h1, como mostrado acima. O nome da funรงรฃo atua como um elemento, como mostrado abaixo:

const Hello_comp = <Hello />;
export default Hello_comp;

O componente Olรก รฉ usado como uma tag HTML, ou seja, , designado para o Olรก_comp variรกvel, e a mesma รฉ exportada usando o comando export.

Vamos agora usar esse componente no arquivo index.js, como mostrado abaixo:

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello_comp from './test.jsx';

ReactDOM.render(
    Hello_comp,
    document.getElementById('root')
);

Aqui estรก a saรญda no navegador:

Saรญda do componente de funรงรฃo no ReactJS

Classe como componente

Aqui estรก um exemplo de ReactJS que usa uma classe como componente.

teste.jsx

import React from 'react';
import ReactDOM from 'react-dom';

class Hello extends React.Component {
  render() {
    return <h1>Hello, from Guru99 Tutorials!</h1>;
  }
}
export default Hello;

Podemos usar o componente Hello no arquivo index.js da seguinte forma:

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello from './test.jsx';

ReactDOM.render(
    <Hello />,
    document.getElementById('root')
);

O componente Hello รฉ usado como uma tag HTML, ou seja, .

Aqui estรก o resultado do mesmo.

Saรญda da classe como componente no navegador

Componentes de classe vs. componentes de funรงรฃo e hooks

Agora que vocรช viu as duas maneiras de escrever um componente, qual delas vocรช deve usar? Esta pรกgina ensina componentes de classe porque eles tornam explรญcitos os conceitos de estado e ciclo de vida, o que รฉ valioso para iniciantes e ainda aparece em bases de cรณdigo legadas. No entanto, desde que o React 16.8 introduziu os Hooks, os componentes de funรงรฃo tambรฉm podem armazenar estado e sรฃo o estilo recomendado para todo o cรณdigo novo.

Aspecto Componente de Classe Componente de funรงรฃo com ganchos
Estado this.state e this.setState() gancho useState()
Ciclo da vida componentDidMount, componentDidUpdate, componentWillUnmount O gancho useEffect() abrange todos os trรชs.
Sintaxe Mais cรณdigo padrรฃo (construtor, bind, this) Mais curto, sem essa palavra-chave
Status Suporte, estilo legado Recomendado para novos cรณdigos.

Aqui estรก o exemplo de estado desta pรกgina reescrito com o hook useState:

import React, { useState } from 'react';

function Hello() {
  const [msg] = useState("Hello, from Guru99 Tutorials!");
  return <h1>{msg}</h1>;
}
export default Hello;

Ambas as versรตes produzem a mesma saรญda. Aprenda a sintaxe de classe usada nos capรญtulos abaixo e, em seguida, pratique a conversรฃo de cada exemplo para Hooks.

O que รฉ um estado no ReactJS?

Um estado รฉ um JavaObjeto de script, semelhante a props, que armazena dados a serem usados โ€‹โ€‹com o renderizador ReactJS. Os dados de estado sรฃo um objeto privado e sรฃo usados โ€‹โ€‹dentro de componentes de uma classe.

Exemplo de Estado

Aqui estรก um exemplo funcional de como usar o estado dentro de uma classe.

teste.jsx

import React from 'react';
import ReactDOM from 'react-dom';

class Hello extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
       msg: "Hello, from Guru99 Tutorials!"
    }
  }
  render() {
    return <h1>{this.state.msg}</h1>;
  }
}
export default Hello;

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello from './test.jsx';

ReactDOM.render(
    <Hello />,
    document.getElementById('root')
);

Isto รฉ o que obtemos quando testamos no navegador:

Estado na saรญda do ReactJS mostrando mensagem do estado

O que sรฃo acessรณrios no ReactJS?

Props sรฃo propriedades que podem ser usadas dentro de um componente. Elas funcionam como objetos ou variรกveis โ€‹โ€‹globais que podem ser utilizadas dentro do componente.

Adereรงos para componente de funรงรฃo

Aqui estรก um exemplo de passagem de adereรงos para um componente de funรงรฃo.

import React from 'react';
import ReactDOM from 'react-dom';
function Hello(props) {
    return <h1>{props.msg}</h1>;
}
const Hello_comp = <Hello msg="Hello, from Guru99 Tutorials!" />;
export default Hello_comp;

Conforme mostrado acima, adicionamos o msg atributo para o componente. O mesmo pode ser acessado como adereรงos dentro da funรงรฃo Hello, que รฉ um objeto que terรก o msg detalhes do atributo, e o mesmo รฉ usado como uma expressรฃo.

O componente รฉ usado em index.js da seguinte forma:

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello_comp from './test.jsx';

ReactDOM.render(
    Hello_comp,
    document.getElementById('root')
);

Aqui estรก a saรญda no navegador:

A propriedade `props` รฉ exibida no navegador para o componente `Function`.

Adereรงos para componente de classe

Para acessar as propriedades de uma classe, podemos fazer da seguinte maneira:

teste.jsx

import React from 'react';
import ReactDOM from 'react-dom';

class Hello extends React.Component {
  render() {
    return <h1>{this.props.msg}</h1>;
  }
}
export default Hello;

As msg O atributo รฉ passado para o componente em index.js da seguinte forma:

import React from 'react';
import ReactDOM from 'react-dom';
import Hello from './test.jsx';

ReactDOM.render(
    <Hello msg="Hello, from Guru99 Tutorials!" />,
    document.getElementById('root')
);

Esta รฉ a saรญda no navegador:

Atribuiรงรฃo de propriedades ร  saรญda do componente de classe no navegador

Verifique tambรฉm: - Tutorial AngularJS para iniciantes: Aprenda AngularJS passo a passo

Ciclo de vida de um componente

Com os conceitos de componentes, estado e propriedades jรก abordados, o prรณximo passo รฉ entender quando o React chama os mรฉtodos do seu componente. O ciclo de vida de um componente รฉ dividido em etapas de Inicializaรงรฃo, Montagem, Atualizaรงรฃo e Desmontagem.

Segue abaixo uma explicaรงรฃo detalhada de cada etapa.

Um componente em ReactJS possui os seguintes estรกgios:

Inicializaรงรฃo: Este รฉ o primeiro estรกgio do ciclo de vida do componente.

Aqui terรก os adereรงos padrรฃo e o estado no nรญvel inicial.

MontagemNesta fase, o componente รฉ renderizado dentro do DOM. Temos acesso aos seguintes mรฉtodos no estado de montagem:

  • render(): Vocรช tem esse mรฉtodo para todos os componentes criados. Ele retorna o nรณ HTML.
  • componentDidMount(): Este mรฉtodo รฉ chamado imediatamente apรณs o componente ser adicionado ao DOM.

AtualizarNesse estado, o usuรกrio interage com o DOM e ele รฉ atualizado. Por exemplo, vocรช digita algo na caixa de texto, e as propriedades do estado sรฃo atualizadas.

A seguir estรฃo os mรฉtodos disponรญveis no estado de atualizaรงรฃo:

  • shouldComponentUpdate(): chamado antes da renderizaรงรฃo; permite que vocรช decida se o componente deve ser atualizado. Retornar verdadeiro renderiza o componente novamente.
  • componentDidUpdate(): chamado apรณs o componente ser atualizado.

Desmontando: Essa situaรงรฃo entra em vigor quando o componente nรฃo รฉ necessรกrio ou รฉ removido.

A seguir, o mรฉtodo disponรญvel no estado desmontado:

  • componentWillUnmount(): chamado imediatamente antes do componente ser removido ou destruรญdo.

Exemplo prรกtico de mรฉtodos de ciclo de vida

Aqui estรก um exemplo funcional que mostra os mรฉtodos chamados em cada etapa.

Exemplo: complife.jsx

import React from 'react';
import ReactDOM from 'react-dom';
class COMP_LIFE extends React.Component {
  constructor(props) {
    super(props);
    this.state = {name: ''};

    this.UpdateName = this.UpdateName.bind(this);
    this.testclick = this.testclick.bind(this);
  }

  UpdateName(event) {
    this.setState({name: event.target.value});
  }

  testclick(event) {
    alert("The name entered is: "+ this.state.name);
  }

  componentDidMount() {
    console.log('Mounting State : calling method componentDidMount');
  }

  shouldComponentUpdate() {
    console.log('Update  State : calling method shouldComponentUpdate');
    return true;
  }

  componentDidUpdate() {
    console.log('Update  State : calling method componentDidUpdate')
  }
  componentWillUnmount() {
    console.log('UnMounting State : calling method componentWillUnmount');
  }

  render() {
    return (
      <div>
         Enter Your Name:<input type="text" value={this.state.name} onChange={this.UpdateName} /><br/>
        <h2>{this.state.name}</h2>
        <input type="button" value="Click Here" onClick={this.testclick} />
      </div>
    );
  }
}

export default COMP_LIFE;

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import COMP_LIFE from './complife.jsx';

ReactDOM.render(
    <COMP_LIFE />,
    document.getElementById('root')
);

Ao verificar a saรญda no navegador:

Exemplo de ciclo de vida renderizado no navegador

No console do navegador, vocรช obtรฉm:

Saรญda do console do navegador mostrando a mensagem componentDidMount

Quando o usuรกrio entra na caixa de texto:

estado do componente de atualizaรงรฃo do campo de texto

No console, as seguintes mensagens sรฃo exibidas:

Saรญda do console mostrando a execuรงรฃo dos mรฉtodos do ciclo de vida de atualizaรงรฃo

Agora que vocรช jรก sabe quando um componente รฉ renderizado e atualizado, vamos aplicar estado e eventos a um caso de uso prรกtico: lidar com a entrada de dados do usuรกrio por meio de formulรกrios.

Trabalhando com Formulรกrios

Em ReactJS, elementos de entrada HTML como , , e <select /> tรชm seu prรณprio estado e precisam ser atualizados quando o usuรกrio interage, usando o mรฉtodo setState().

Neste capรญtulo, veremos como trabalhar com formulรกrios em ReactJS.

Aqui estรก um exemplo prรกtico:

formulรกrio.jsx

import React from 'react';
import ReactDOM from 'react-dom';
class Form extends React.Component {
  constructor(props) {
    super(props);
    this.state = {name: ''};

    this.UpdateName = this.UpdateName.bind(this);
    this.formSubmit = this.formSubmit.bind(this);
  }

  UpdateName(event) {
    this.setState({name: event.target.value});
  }

  formSubmit(event) {
    alert("The name entered is: "+ this.state.name);
  }

  render() {
    return (
      <form>
         Enter Your Name:<input type="text" value={this.state.name} onChange={this.UpdateName} /><br/>
        <h2>{this.state.name}</h2>
        <input type="submit" value="Submit" onClick={this.formSubmit} />
      </form>
    );
  }
}

export default Form;

Para os campos de entrada, precisamos manter o estado, e para isso o React fornece um mรฉtodo especial chamado definirEstado, que ajuda a manter o estado sempre que hรก uma mudanรงa. Em uma aplicaรงรฃo real, tambรฉm รฉ chamado de event.preventDefault() Dentro do formulรกrio FormSubmit, para impedir que o navegador recarregue a pรกgina ao enviar o formulรกrio.

Utilizamos os eventos onChange e onClick na caixa de texto e no botรฃo de envio. Quando o usuรกrio digita na caixa de texto, o evento onChange รฉ acionado e o campo "name" dentro do objeto de estado รฉ atualizado, conforme mostrado abaixo:

UpdateName(event) {
    this.setState({name: event.target.value});
  }

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Form from './form.jsx';

ReactDOM.render(
    <Form />,
    document.getElementById('root')
);

A saรญda no navegador รฉ a seguinte:

Trabalhando com formulรกrios - saรญda inicial do formulรกrio

Passo 1) Digite seu nome na caixa de texto:

Trabalhando com formulรกrios - nome inserido na caixa de texto

Passo 2) Clique no botรฃo Enviar:

Trabalhando com formulรกrios - alerta exibido apรณs o envio

Trabalhando com eventos no ReactJS

Os formulรกrios sรฃo apenas uma das fontes de interaรงรฃo do usuรกrio. Trabalhar com eventos no ReactJS รฉ da mesma forma que vocรช faria em... JavaScript. Vocรช pode usar todos os manipuladores de eventos que sรฃo usados โ€‹โ€‹em JavaScript. O mรฉtodo setState() รฉ usado para atualizar o estado quando o usuรกrio interage com qualquer elemento HTML.

Aqui estรก um exemplo prรกtico de como usar eventos em ReactJS.

eventos.jsx

import React from 'react';
import ReactDOM from 'react-dom';
class EventTest extends React.Component {
  constructor(props) {
    super(props);
    this.state = {name: ''};

    this.UpdateName = this.UpdateName.bind(this);
    this.testclick = this.testclick.bind(this);
  }

  UpdateName(event) {
    this.setState({name: event.target.value});
  }

  testclick(event) {
    alert("The name entered is: "+ this.state.name);
  }

  render() {
    return (
      <div>
         Enter Your Name:<input type="text" value={this.state.name} onChange={this.UpdateName} /><br/>
        <h2>{this.state.name}</h2>
        <input type="button" value="Click Here" onClick={this.testclick} />
      </div>
    );
  }
}

export default EventTest;

Para os campos de entrada, precisamos manter o estado, e para isso o React fornece o definirEstado mรฉtodo, que ajuda a manter o estado sempre que ocorre uma mudanรงa.

Utilizamos os eventos em mudanรงa e onClick na caixa de texto e no botรฃo. Quando o usuรกrio digita na caixa de texto, o em mudanรงa O evento รฉ acionado e o campo "nome" dentro do objeto de estado รฉ atualizado, conforme mostrado abaixo:

UpdateName(event) {
    this.setState({name: event.target.value});
  }

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import EventTest from './events.jsx';

ReactDOM.render(
    <EventTest />,
    document.getElementById('root')
);

Aqui estรก a saรญda no navegador:

Trabalhando com eventos - saรญda inicial no navegador

Quando um usuรกrio insere o nome:

Trabalhando com eventos - nome exibido conforme os tipos de usuรกrio

Quando o usuรกrio clica no botรฃo Clique Aqui:

Trabalhando com eventos - alerta exibido ao clicar no botรฃo

Trabalhando com CSS Inline no ReactJS

Depois que seus componentes lidam com dados e eventos, a etapa final รฉ estilizar. Vamos analisar um exemplo prรกtico para entender o CSS inline no ReactJS.

adicionar estilo.jsx

import React from 'react';
import ReactDOM from 'react-dom';

const h1Style = {
    color: 'red'
};

function Hello(props) {
    return <h1 style={h1Style}>{props.msg}</h1>;
}
const Hello_comp = <Hello msg="Hello, from Guru99 Tutorials!" />;
export default Hello_comp;

Adicionei o estilo de cor 'vermelho' ร  tag h1.

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello_comp from './addstyle.jsx';

ReactDOM.render(
    Hello_comp,
    document.getElementById('root')
);

A saรญda no navegador รฉ a seguinte:

Trabalhando com CSS embutido - saรญda de cabeรงalho vermelho

Vocรช pode criar um objeto com o estilo desejado para o elemento e usar uma expressรฃo para adicionar o estilo, como mostrado no exemplo acima.

Trabalhando com CSS externo no ReactJS

Vamos criar um arquivo CSS externo. Para isso, crie uma pasta chamada css/ e adicione o arquivo style.css dentro dela.

style.css

.h1tag {
color:red;
}

Adicione o style.css ao seu arquivo index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>ReactJS Demo</title>
    <link href="css/style.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <div id = "root"></div>
  </body>
</html>

Agora vamos adicionar a classe ร  tag h1 no arquivo .jsx.

adicionar estilo.jsx

import React from 'react';
import ReactDOM from 'react-dom';

let classforh1 = 'h1tag';

function Hello(props) {
    return <h1 className={classforh1}>{props.msg}</h1>;
}
const Hello_comp = <Hello msg="Hello, from Guru99 Tutorials!" />;
export default Hello_comp;

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Hello_comp from './addstyle.jsx';

ReactDOM.render(
    Hello_comp,
    document.getElementById('root')
);

O atributo className recebe os detalhes da classe. Observe que o JSX usa nome da classe em vez do atributo de classe HTML, porque `class` รฉ uma palavra-chave reservada em JavaScript. Agora vamos testรก-lo no navegador.

Trabalhando com CSS externo - saรญda de cabeรงalho estilizado

Isto รฉ o que vocรช vรช ao inspecionar a tag h1 no navegador:

Trabalhando com CSS externo - tag h1 inspecionada mostrando a classe

Vocรช pode ver que a classe โ€œh1tagโ€ foi adicionada com sucesso ร  tag h1.

Por que ReactDOM.render foi substituรญdo por createRoot?

Todos os exemplos nesta pรกgina montam o aplicativo com ReactDOM.render, o que รฉ correto para o React 16 e 17, as versรตes abordadas neste curso. O React 18, lanรงado em marรงo de 2022, substituiu esse ponto de entrada pela API createRoot, e o React 19 removeu o ReactDOM.render completamente. O motivo รฉ a concorrรชncia: createRoot permite que o React prepare vรกrias versรตes da interface do usuรกrio ao mesmo tempo, interrompa a renderizaรงรฃo de baixa prioridade e mantenha a consistรชncia.ping e animaรงรตes suaves. Recursos como agrupamento automรกtico, useTransition e streaming baseado em Suspense dependem disso.

O equivalente moderno do arquivo index.js usado ao longo desta pรกgina tem a seguinte aparรชncia:

import { createRoot } from 'react-dom/client';

const root = createRoot(document.getElementById('root'));
root.render(<h1>Hello, from Guru99 Tutorials!</h1>);

Tudo o que vocรช aprendeu aqui โ€” componentes, JSX, estado, propriedades e eventos โ€” funciona da mesma maneira apรณs essa alteraรงรฃo de uma linha no ponto de entrada. Diferenรงas de versรฃo como essa sรฃo comuns em Perguntas de entrevista sobre React JSPortanto, vale a pena entender ambas as APIs.

Perguntas Frequentes

ReactJS รฉ uma biblioteca, nรฃo um framework completo. Ela se concentra apenas na construรงรฃo da interface do usuรกrio. Para roteamento, busca de dados e renderizaรงรฃo no servidor, os desenvolvedores a combinam com ferramentas como React Router ou frameworks como [nome do framework]. Prรณximo.js.

Com sรณlido JavaPara dominar os conceitos bรกsicos de programaรงรฃo, a maioria dos alunos aprende componentes, JSX, estado e propriedades em duas a quatro semanas de prรกtica regular. A preparaรงรฃo para o mercado de trabalho, incluindo Hooks, roteamento e chamadas de API, geralmente leva de dois a trรชs meses de desenvolvimento de pequenos projetos.

ReactJS renderiza no DOM do navegador para construir sites, enquanto React Native usa o mesmo modelo de componentes para construir aplicativos nativos para iOS e iOS. Android Os aplicativos permitem a transferรชncia de habilidades entre os dois, mas o React Native substitui as tags HTML por componentes de interface do usuรกrio nativos.

Sim. Assistentes como Copiloto do GitHub e ChatGPT Pode gerar componentes, explicar erros e converter componentes de classe em Hooks. Sempre revise o cรณdigo gerado, pois a IA pode sugerir APIs desatualizadas como ReactDOM.render.

Improvรกvel no curto prazo. A IA acelera a codificaรงรฃo rotineira, mas os desenvolvedores ainda sรฃo necessรกrios para projetar a arquitetura de componentes, gerenciar o estado em toda a aplicaรงรฃo, revisar a acessibilidade e depurar problemas em produรงรฃo. Aprender React e fluxos de trabalho assistidos por IA torna vocรช mais valioso, nรฃo menos.

Verifique tambรฉm: - As 70 principais perguntas e respostas da entrevista React (atualizado)

Resuma esta postagem com: