React Hooks – Uma Introdução
Hooks
Os Hooks foram introduzidos no React na sua versão 16.8 e são muito úteis. Para utilizá-los você precisa atualizar todos seus pacotes do React para versão 16.8 ou superior.
Mas afinal, oque são Hooks
Hooks são funções JavaScript que nos permitem utilizar estado e outros recursos do React sem necessidade de um componente de classe, eles são usados em componentes funcionais. Hooks não funcionam dentro de classes — eles permitem utilizarmos React sem classes. Isso significa que podemos escrever componentes funcionais (que são menos verbosos) e ainda utilizar variáveis de estado. 😍
O React já traz alguns hooks
que podemos utilizar, mas também é possível construirmos nossos próprios hooks
. Vamos valar de dois hooks
bem legais e com certeza você vai usar.
- State Hook
- Efect Hook
State Hook
O Hook de estado introduz a função useState
que nos permite criar variáveis de estado nos nossos componentes funcionais. Vejamos este exemplo:
import React, { useState } from 'react';
export default function Count() {
const [count, setCount] = useState(0);
return (
<div>
<p>Você clicou {count} vezes</p>
<button onClick={() => setCount(count + 1)}>
Clique aqui
</button>
</div>
)
}
Neste trecho de código eu chamei o hook
de estado (useState
). useState
recebe um único parâmetro, que é o valor inicial da variável. Neste exemplo a variável count
vai inicializar com valor zero (0).
O retorno de useState
são dois argumentos, o primeiro é o valor inicial que foi informado por parâmetro. Já o segundo argumento retornado é uma função que serve para atualizar o nossa variável de estado. Neste exemplo ele foi chamada de setCount
. A função setCount
é parecida com setState
dos classes.
Podemos chamar useSate
quantas vezes forem necessárias:
import React, { useState } from 'react';
export default function SignUp() {
const [name, setName] = useState('');
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
//...
}
Hook de efeito
O Hook de Efeito, useEffect
, adiciona a funcionalidade de executar efeitos colaterais através de um componente funcional. Segue a mesma finalidade do componentDidMount
, componentDidUpdate
, e componentWillUnmount
em classes React, mas unificado em uma mesma API.
const { useEffect, useState } = React
const CounterWithNameAndSideEffect = () => {
const [count, setCount] = useState(0)
const [name, setName] = useState('Josias')
useEffect(() => {
console.log(`Hi ${name} you clicked ${count} times`)
})
return (
<div>
<p>
Hi {name} you clicked {count} times
</p>
<button onClick={() => setCount(count + 1)}>Click me</button>
<button onClick={() => setName(name === 'Josias' ? 'João' : 'Josias')}>
Change name
</button>
</div>
)
}
O mesmo resultado de componentWillUnmount
pode ser alcançado retornando opcionalmente uma função do nosso useEffect()
parâmetro:
useEffect(() => {
console.log(`Hi ${name} you clicked ${count} times`)
return () => {
console.log(`Unmounted`)
}
})
Como as funções useEffect()
são executadas em cada re-renderização / atualização subsequente, podemos dizer ao React para pular uma execução, para fins de desempenho, adicionando um segundo parâmetro que é uma matriz que contém uma lista de variáveis de estado a serem observadas. React só executará novamente este hook se um dos itens nesta matriz for alterado.
useEffect(
() => {
console.log(`Hi ${name} you clicked ${count} times`)
},
[name, count]
)
Da mesma forma, você pode dizer ao React para executar apenas o efeito colateral uma vez (no tempo de montagem), passando uma matriz vazia:
useEffect(() => {
console.log(`Component mounted`)
}, [])
Concluindo
Bom, o objetivo deste post foi trazer os principais Hooks do React em uma explicação simples e fácil de entender. Espero que tenha gostado. 😉
Ficou com dúvida? deixa nos comentários..
Grande abraço, até o próximo post!