Inicialmente, vamos entender. O que são hooks? São funções do React que nos permitem utilizar recursos como gerenciamento de estados e efeitos colaterais em componentes funcionais, sem precisar escrever classes ou diversas linhas de código.
O que podemos fazer com eles? Bom, gerenciamento de estados, ações após a renderização, acessar estados globais e até mesmo, utilizar referências.
useState
Ele é quem nos permite controlar os estados de um componente. Ele retorna um par de valores: o valor atual do estado e uma função para atualizá-lo.
No exemplo abaixo, ele está sendo utilizado para gerenciar se uma certa cadeira já foi arremessada. Quando o usuário clicar em "Sim" ou "Não", o estado é atualizado e a resposta exibida será alterada.
function App() {
// Iniciamos como falso, já que não aconteceu ainda
const [cadeiraJaFoiArremessada, setCadeiraJaFoiArremessada] = useState(false)
// Função para atualizar o estado para verdadeiro
const confirmarArremesso = () => {
setCadeiraJaFoiArremessada(true)
}
// Função para atualizar o estado para falso
const negarArremesso = () => {
setCadeiraJaFoiArremessada(false)
}
return (
<div>
<h1>A cadeira já foi remessada?</h1>
<h2>Resposta: {cadeiraJaFoiArremessada ? 'Sim' : 'Não'}</h2>
<button onClick={confirmarArremesso}>Sim</button>
<button onClick={negarArremesso}>Não</button>
</div>
)
}
Existem outras maneira de se fazer isso ao invés de criar funções propriamente ditas e tornar tudo mais simples, como:
<button onClick={() => setCadeiraJaFoiArremessada(true)}>Sim</button>
<button onClick={() => setCadeiraJaFoiArremessada(false)}>Não</button>
Isso irá eliminar uma quantidade imensa de código desnecessário e a funcionalidade ainda será a mesma.
useEffect
Este hook nos permite executar efeitos colaterais em componentes, como chamadas de API e manipulação de DOM.
Ele roda uma vez após a renderização inicial do componente e pode ser configurado para ser disparado sempre que um valor no array de dependências mudar.
No exemplo abaixo, sempre que a variável cadeiraJaFoiArremessada for alterada, a função será executada.
useEffect(() => {
if (cadeiraJaFoiArremessada) {
alert('Arremessaram a cadeira')
}
}, [cadeiraJaFoiArremessada])
useRef
Ele nos possibilidade criarmos uma referência mutável, a qual podemos associar a elementos do DOM, como inputs, sem precisar causar uma nova renderização do componente.
No exemplo abaixo, usamos o useRef para referenciar o campo de input e, com a função focarNoInput, podemos aplicar o foco diretamente utilizando o Javascript.
function App() {
const inputRef = useRef(null)
const focarNoInput = () => inputRef.current.focus()
return (
<div>
<label>Quem arremessou a cadeira?</label>
<input ref={inputRef} type="text" />
<button onClick={focarNoInput}>Focar no input</button>
</div>
)
}
Curtiu o conteúdo? Fique à vontade para acrescentar ou perguntar algo útil para mim lá no Twitter/X, compartilhe com amigos e conhecidos caso esse conteúdo tenha sido útil. Até mais!