felipemotarocha / fullstackweek-store

https://fullstackweek-store.vercel.app
240 stars 80 forks source link

localStorage is not defined #3

Closed ghost closed 11 months ago

ghost commented 11 months ago

Após a finalização do evento verifiquei que o deploy correspondente aos dois ultimos commits realizados falhou com o erro

ReferenceError: localStorage is not defined
 at __WEBPACK_DEFAULT_EXPORT__ (/vercel/path0/.next/server/chunks/240.js:1:14186)

No momento da build ao gerar as páginas estáticas ocorre o erro pois o objeto localStorage ainda é undefined.

Correção:

No arquivo src/providers/cart.tsx:

Alterar o valor inicial do state products. Trocar de

const [products, setProducts] = useState<CartProduct[]>(
    JSON.parse(localStorage.getItem("@fsw-store/cart-products") || "[]")
  );

Para:

const [products, setProducts] = useState<CartProduct[]>([]);

Adicionar um useEffect com array de dependencias vazio, dessa forma só executará uma vez no carregamento da página:

useEffect(() => {
    setProducts(
      JSON.parse(localStorage.getItem("@fsw-store/cart-products") || "[]"),
    );
  }, []);

A solução acima já foi testada em fork deste repositório.