00 - O que são os hooks?

Os hooks são um novo jeito de escrever componentes react de forma mais simples sem a necessidade de usarmos classes, constructors, etc. Com eles podemos escrever os mesmos componentes que antes com muito menos código :)

Criando nosso primeiro componente usando hooks

Para começarmos o nosso entendimento sobre hooks vamos pegar como exemplo um contador que foi escrito usando classe:

import React, { Component } from 'react'; class App extends Component { constructor() { super(props); this.state = { count: 0, }; } addCount = () => { this.setState({ count: this.state.count + 1, }); } render(){ return( <div> <p>você clicou {this.state.count} vezez!</p> <button onClick={this.addCount}>clique aqui.</button> </div> ) } } export default App;

Até aqui nada demais, nosso bom e velho contador. Inicializamos um state count com o valor 0 e incrementamos esse valor a cada clique no button usando o método addCount. Vamos converter esse componente para o novo padrão utilizando os hooks.

Hooks na prática

import React, { useState } from 'react'; const App = () => { const [count, addCount] = useState(0); return( <div> <p>você clicou {count} vezez!</p> <button onClick={() => addCount(count + 1)}>clique aqui.</button> </div> ) } export default App;

Bem diferente ne? Vamos quebrar em partes o processo:

Primeiro importamos um novo método do react chamado useState esse é o nosso hook. Com eles poderemos criar estados no nosso componente. A criação do nosso state é feita da seguinte forma:

const [count, addCount] = useState(0);

Criamos uma constante e vamos passar dois valores para ela dentro de um array. O primeiro item no array é o nosso estado, o segundo item é uma função que usaremos para modificar o estado. Após o operador de atribuição (=) vamos chamar nosso método useState e passar como argumento o valor inicial que desejamos para o nosso estado.

A partir disso, no nosso exemplo, todas as vezes que quisermos ler esse estado podemos checá-lo através da variável count e para alterar o estado usamos a função addCount.

Mais exemplos

Copie o código abaixo em um sandbox e divirta-se :)

import React, { useState } from 'react'; const App = () => { const [names, setNames] = useState(['Luan', 'Pâmela', 'Dandara', 'Kelvin']); return( <div> <p>Meus amigos preferidos:</p> <ul> {names.map((name) => ( <li>{name}</li> ))} </ul> </div> ) } export default App; import React, { useState } from 'react'; const App = () => { const [showMessage, setShowMessage] = useState(false); return( <div> {showMessage && ( <p>Essa é minha mensagem para todos voçês: Busquem conhecimento</p> )} <button onClick={() => showMessage(!showMessage)}> {showMessage ? 'ocultar mensagem' : 'mostrar mensagem'} </button> </div> ) } export default App; import React, { useState } from 'react'; const App = () => { const [list, changeList] = useState([ { label: 'Limpar a casa', done: false, }, { label: 'Estudar react', done: false, }, { label: 'Assistir minha série favorita', done: false, } ]); const updateList = (text) => { changeList( ...list, { label: text, done: false } ); } return( <div> <ul> {list.map((item, index) => ( <li key={index}>{item.label}</li> ))} </ul> <button onClick={() => updateList('Aprender Hooks')}> novo item </button> </div> ) } export default App;