Analisando o código mostrado na aula 4, atividade 4. Vi que tinha outra possibilidade de alterar o valor total dos produtos e a quantidade de produtos no carrinho.
Atribuindo o valor total acumulado no Reduce para uma única variável e alterando o state valorTotal através do setValorTotal.
useEffect(() => {
const valor = carrinho.reduce((acc, produto) => acc + produto.preco * produto.quantidade, 0)
setValorTotal(valor);
}, [carrinho])
No caso para mostrar a quantidade de produtos no carrinho, bastaria chamar o state carrinho através do useCarrinhoContext no componente BarraNavegacao e passar para o componente BotaoCarrinho através da prop quantidadeProdutos o valor carrinho.length.
const { carrinho } = useCarrinhoContext();
...
<BotaoCarrinho
className={`d-none d-md-block ${
ehAPaginaCarrinho && "d-md-none"
}`}
quantidadeProdutos={carrinho.length}
/>
...
Achei mais simples a resolução dessa forma, teria algum problema no futuro ou seria uma possível forma de resolver ?