From 85ebaf2cff3a12e8f5ca8295ffe4e9bc6900eb41 Mon Sep 17 00:00:00 2001 From: bender Date: Wed, 11 Mar 2026 19:40:54 +0000 Subject: [PATCH] Switch to version 1: modified src/hooks/useProducts.ts --- src/hooks/useProducts.ts | 50 ++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/src/hooks/useProducts.ts b/src/hooks/useProducts.ts index bb48ea3..53609fa 100644 --- a/src/hooks/useProducts.ts +++ b/src/hooks/useProducts.ts @@ -1,23 +1,39 @@ -'use client'; +"use client"; -import { useState, useEffect } from 'react'; -import { Product, fetchProductList } from '@/lib/api/product'; +import { useEffect, useState } from "react"; +import { Product, fetchProducts } from "@/lib/api/product"; export function useProducts() { - const [products, setProducts] = useState([]); - const [loading, setLoading] = useState(true); + const [products, setProducts] = useState([]); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(null); - useEffect(() => { - const loadProducts = async () => { - try { - const data = await fetchProductList(); - setProducts(data); - } finally { - setLoading(false); - } - }; - loadProducts(); - }, []); + useEffect(() => { + let isMounted = true; - return { products, loading }; + async function loadProducts() { + try { + const data = await fetchProducts(); + if (isMounted) { + setProducts(data); + } + } catch (err) { + if (isMounted) { + setError(err instanceof Error ? err : new Error("Failed to fetch products")); + } + } finally { + if (isMounted) { + setIsLoading(false); + } + } + } + + loadProducts(); + + return () => { + isMounted = false; + }; + }, []); + + return { products, isLoading, error }; }