Ao invés de utilizar outros estados, calculei diretamente do estado carrinho, teria alguma diferença em relação a performance?
import { useContext } from "react"
import { CarrinhoContext } from "../Context/CarrinhoContext"
export const useCarrinhoContext = () => {
const { carrinho, setCarrinho } = useContext(CarrinhoContext);
function mudarQuantidade (id, quantidade) {
return carrinho.map(itemDoCarrinho => {
if (itemDoCarrinho.id === id) itemDoCarrinho.quantidade += quantidade;
return itemDoCarrinho;
})
}
function adicionarProduto(novoProduto) {
const temOProduto = carrinho.some(
(itemDoCarrinho) => itemDoCarrinho.id === novoProduto.id
)
if (!temOProduto) {
novoProduto.quantidade = 1;
return setCarrinho((carrinhoAnterior) => [
...carrinhoAnterior, novoProduto
])
}
const carrinhoAtualizado = mudarQuantidade(novoProduto.id, 1);
setCarrinho([...carrinhoAtualizado])
}
function removerProduto(id) {
const produto = carrinho.find((itemDoCarrinho) => itemDoCarrinho.id === id);
const ehOUltimo = produto.quantidade === 1;
if (ehOUltimo) {
return setCarrinho((carrinhoAnterior) =>
carrinhoAnterior.filter((itemDoCarrinho) => itemDoCarrinho.id !== id)
);
}
const carrinhoAtualizado = mudarQuantidade(id, -1);
setCarrinho([...carrinhoAtualizado]);
}
function removerProdutoCarrinho(id) {
const carrinhoFiltrado = carrinho.filter(itemDoCarrinho => itemDoCarrinho.id !== id);
setCarrinho(carrinhoFiltrado);
}
function valorTotalCarrinho () {
return carrinho.reduce((total, itemDoCarrinho) => total + (itemDoCarrinho.preco * itemDoCarrinho.quantidade), 0);
}
function quantidadeProdutos() {
return carrinho.reduce((total, itemDoCarrinho) => total + itemDoCarrinho.quantidade, 0);
}
return {
carrinho,
setCarrinho,
adicionarProduto,
removerProduto,
removerProdutoCarrinho,
valorTotalCarrinho,
quantidadeProdutos
}
}