LogoLogo
Site da {struct}Organização no GitlabOrganização no GithubGitbook no Github
Gitbook
Gitbook
  • Bem-Vindo à Wiki da {struct}
    • Guia Markdown
  • Gestão
    • Presidência
    • Administrativo-Financeiro
      • Pesquisa e Desenvolvimento (R&D)
      • Reembolso de membros
      • Cupons e Prêmios
    • Projetos
    • Marketing
    • Comercial
      • Funil de Vendas
      • Fazer Proposta
      • Inserir Projetos no Portal BJ
      • Interação com Clientes
    • Gestão de Pessoas
    • MEJ
    • Processo Seletivo
      • Processo Trainee
        • Guias Utilizados
        • Ferramentas
      • Readmissão de Membros
  • Execução
    • Git
      • Conceitos básicos
      • Utilização em projetos
      • Soluções para problemas comuns
    • Ruby on Rails
      • Instalação
      • Obtenção de licença Jetbrains
      • Bash de Ubuntu no Windows
      • Geradores Rails
    • Devise
    • Rspec e Factory Bot
      • Instalação Rspec
      • Testando Models
      • Instalação Factory Bot
      • Usando o Factory Bot
      • Testando Controllers
      • Testando Controllers Versionadas
      • Testes com Associatividade
      • Testando Devise
    • Front-end
      • HTML
      • CSS
      • React js
        • Instalação
        • Componentes
        • Estilizando
        • Hooks
        • Mais sobre
    • Flutter
    • Projetos
      • Cloudinary
      • Gerência de projetos
      • Finalização de Projetos
      • Gitlab
        • CI-CD
      • Integrações
        • Discord - GitHub
    • Técnicas de Programação Ágil
      • Scrum
      • Behavior Driven Design
      • Test-Driven Development
    • Dados Estruturados
    • Gamificação
      • Clockify
    • Mailer
    • Assinatura Digital de Documentos
Powered by GitBook
On this page
  • Um problema:
  • useState
  • useEffect
  • useContext

Was this helpful?

  1. Execução
  2. Front-end
  3. React js

Hooks

PreviousEstilizandoNextMais sobre

Last updated 2 years ago

Was this helpful?

O react possibilita a criação de componentes. Mas e quando queremos que o html renderizado pelo componente seja atualizado junto com alguma variável do javascript? Nos componentes funcionais (sem ser feitos com classes), usamos os .

Um problema:

Queremos fazer um contador, onde sempre que um botão é clicado, um número que aparece na tela aumenta. Porém, podemos ver que isso não funciona:

import { Container } from "./styles";

const Counter = () => {
	var count = 1;

	const handleCounterIncrement = () => {
		counter = counter + 1;
	};

	return (
		<Container>
			<p>Counter: {counter}</p>
			<button onClick={handleCounterIncrement}>Increment</button>
		</Container>
	);
};
export default Counter;

useState

Função que recebe um estado inicial e retorna uma variável e um setter.

Serve para declarar variáveis com as quais se deseja sincronizar o conteúdo da página. Por exemplo:

import { Container } from "./styles";
import { useEffect, useState } from "react";

const Counter = () => {
	const [count, setCount] = useState(0);

	const handleCounterIncrement = () => {
		setCount(counter + 1);
	};

	return (
		<Container>
			<p>Count value = {count}</p>
			<button onClick={handleCounterIncrement}>Increment</button>
		</Container>
	);
};
export default Counter;

useEffect

Função que recebe um callback (arrow function) e um array de dependências. Quando o componente for rerenderizado, se alguma das variáveis do array de dependências tiver mudado, o callback é executado.

import { Container } from "./styles";
import { useEffect, useState } from "react";

const Counter = () => {
	const [count, setCount] = useState(0);

	// acrescentando um efeito que é disparado na primeira renderização, e depois sempre que count muda:
	useEffect(() => {
		console.log(count);
		if (count === 1) {
			alert("count === 1 is true");
			// some logic
		}
	}, [count]);

	return (
		<Container>
			<p>Count value = {count}</p>
			<button onClick={() => setCount(count + 1)}>Increment</button>
		</Container>
	);
};
export default Counter;

Atenção: se o useEffect não tiver array de dependêcia, a partir do react 18, ele roda com a mudança de qualquer estado no componente, o que pode gerar um useEffect rodando infinitamente até crashar seu servidor.

useContext

Serve para criar um contexto. Considere uma aplicação web inteira que é baseada num usuário logado. Usando o que conhecemos até agora, teríamos que guardar o usuário na raíz da aplicação e passar pra todos os filhos que precisam (praticamente todos) o usuário e funções (como a de login) por props. Mas e se pudéssemos fazer um estado global, acessível sem ser apenas pelas props? É exatamente isso que é o contexto.

Exemplos: https://codesandbox.io/s/usecontext-demo-qtugvt?file=/src/contexts/UserContext.js https://www.youtube.com/watch?v=Zz4icNdPzTM

Serve principalmente para sincronizar um efeito com alguma mudança de variável. Por :

hooks
exemplo