Caso não lembre como funciona o processo de entrega, clique aqui
- Criação de Custom Hooks
- Implementação de Custom Hooks
Você pode usar este template do github ou o template do codesandbox
O exercício de hoje é construir um Custom Hook que gerencia um contador, que tem valores numéricos que incrementam e decrementam, e que pode ser zerado. Vamos entender um caso de uso para este Custom Hook.
Imagine que você está construindo um e-commerce. Sempre que uma pessoa quiser comprar um item, ela deve ser capaz de selecionar a quantidade de itens que quer. Algo parecido com isso:
O código do componente “Cart” (ou Carrinho) está assim:
const Cart = () => {
const [quantity, setQuantity] = useState(0);
return (
<div className="Cart">
<h1>Meu carrinho</h1>
<Item
label="My produto massa"
quantity={quantity}
onIncrement={() => setQuantity((q) => q + 1)}
onDecrement={() => setQuantity((q) => q - 1)}
onReset={() => setQuantity(0)}
/>
</div>
);
}
Este componente pode ser simplificado ao criar um Custom Hook useCounter
. Algo como:
function Cart() {
const quantity = useCounter(0);
return (
<div className="Cart">
<h1>Meu Carrinho</h1>
<Item
label="My produto massa"
quantity={quantity.value}
onIncrement={quantity.increment}
onDecrement={quantity.decrement}
onReset={quantity.reset}
/>
</div>
);
}
O exercício de hoje é implementar este Custom Hook! Ao terminar você deve ter algo assim:
useCounterCarrinho.mp4
Caso tenha conseguido construir, temos algumas sugestões de como melhorar:
- Adicionar um parâmetro de “quantidade de aumento”. Isto é, ao invés de subir de 1 em 1, este valor poder ser customizado
- algo como
counter.increment(step)
)
- algo como
- Adicionar um valor mínimo e máximo
- algo como
useCounter({ min: 0, max: 10, initial: 0}))
;
- algo como
- Poder definir o valor do contador escrevendo no campo ao invés de apenas usar + e -
- algo como
counter.set(value)
- algo como