صفحة تفاصيل المنتج ممكن تجمع أكتر من Slice، وده طبيعي.
pages/product-details/ui/product-details-page.tsx
import { useQuery } from '@tanstack/react-query';import { productQueries } from '@/entities/product';import { AddToCartButton } from '@/features/add-to-cart';import { WishlistButton } from '@/features/add-to-wishlist';interface Props { productId: string;}export function ProductDetailsPage({ productId,}: Props) { const { data: product, isPending, isError } = useQuery(productQueries.detail(productId)); if (isPending) return <p>Loading product...</p>; if (isError || !product) { return <p>Could not load product.</p>; } return ( <main> <img src={product.image} alt={product.title} /> <h1>{product.title}</h1> <p>{product.price}</p> <AddToCartButton productId={product.id} /> <WishlistButton productId={product.id} /> </main> );}الصفحة بتعمل Composition للـ Features والـ Entities. مش مسؤولة عن تنفيذ منطق الإضافة للسلة أو الـ Wishlist.
لو الـ Wishlist محتاجة تعرف هل المنتج موجود فيها، فالأفضل إن add-to-wishlist تستخدم الـ Entity المناسبة أو الـ API الخاص بها. مش إنها تعتمد على add-to-cart.
خلّصت الفصل لما
🧠 اختبر نفسك
١) صفحة التفاصيل تنفّذ طلب إضافة السلة بنفسها؟
لأ. بتستدعي
AddToCartButton. المنطق جوه الفيتشر.٢) المفضلة تعرف حالة المنتج منين؟
من الـ Entity أو الـ API بتاعها، مش من
add-to-cart.