📌 مقدمة
في هذا المقال سنقوم ببناء متجر إلكتروني بسيط باستخدام React، مع الاعتماد على مكتبة react-router-dom لإنشاء نظام تنقل احترافي بين الصفحات.
التطبيق سيتكون من:
- شريط تنقل (Navbar)
- سلايدر (Slider)
- قائمة منتجات
- صفحة تفاصيل لكل منتج
الصفحة الأولى: main.jsx
import 'bootstrap/dist/css/bootstrap.min.css'
import 'bootstrap/dist/js/bootstrap.bundle.min.js'
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import { BrowserRouter } from 'react-router-dom'
import App from './App.jsx'
import './index.css'
createRoot(document.getElementById('root')).render(
,
)
شرح الصفحة
هذه الصفحة مسؤولة عن تشغيل التطبيق. تم استخدام BrowserRouter لتفعيل التنقل داخل المشروع، بحيث يمكن استخدام الروابط بدون إعادة تحميل الصفحة.
الصفحة الثانية: App.jsx
import { Route, Routes } from 'react-router-dom';
import Navbar from './componants/componants/Navbar';
import ProductList from './componants/componants/ProductList';
import Slider from './componants/componants/Slider';
import ProductDetail from './componants/ProductDetail';
function App() {
return (
<>
```
<Routes>
<Route
path="/"
element={
<>
<Slider />
<ProductList />
</>
}
/>
<Route
path="/products/:prodId"
element={<ProductDetail />}
/>
</Routes>
</>
```
)
}
export default App;
شرح الصفحة
هذه الصفحة مسؤولة عن تنظيم التنقل داخل التطبيق. تم استخدام Routes لعرض الصفحات حسب الرابط.
- الصفحة الرئيسية تعرض السلايدر وقائمة المنتجات
- صفحة التفاصيل تعرض منتج واحد حسب ID
الصفحة الثالثة: Navbar.jsx
import { Link } from "react-router-dom";
function Navbar() {
return (
شرح الصفحة
هذا المكون يمثل شريط التنقل في الموقع. تم استخدام Link بدلًا من الروابط التقليدية لضمان التنقل بدون إعادة تحميل الصفحة.
الـ Navbar يظهر في جميع الصفحات لأنه تم وضعه خارج Routes.
الصفحة الرابعة: Slider.jsx
import '../css_componant/Slider.css';
function Slider() {
const images = [
"https://shipsy.io/wp-content/uploads/2021/02/Blog-91.jpg",
"https://ebz-static.s3.ap-south-1.amazonaws.com/easebuzz-static/upi-credit-cards-v1.png",
"https://www.dimofinf.sa/blog/wp-content/uploads/2024/07/ecommerce.png",
];
```
return (
<div id="carouselExample" className="carousel slide">
<div className="carousel-inner">
<div className="carousel-item active">
<img src={images[0]} className="d-block w-100" />
</div>
<div className="carousel-item">
<img src={images[1]} className="d-block w-100" />
</div>
<div className="carousel-item">
<img src={images[2]} className="d-block w-100" />
</div>
</div>
</div>
)
```
}
export default Slider;
شرح الصفحة
هذا المكون يعرض صور متحركة (Carousel) باستخدام Bootstrap. الهدف منه تحسين واجهة المستخدم وجعل الصفحة الرئيسية أكثر جاذبية.
الصفحة الخامسة: ProductItem.jsx
import { Link } from "react-router-dom";
function ProductItem({ product, showButton = true, allData = false }) {
return (
```
<img src={product?.image} className="card-img-top" />
<div className="card-body">
<h5>
{allData ? product.title : product.title?.substring(0, 15)}
</h5>
<p>
{allData ? product.description : product.description?.substring(0, 100)}
</p>
{showButton && (
<Link to={`/products/${product.id}`} className="btn btn-primary">
View Details
</Link>
)}
</div>
</div>
```
);
}
export default ProductItem;
شرح الصفحة
هذا المكون يعرض المنتج داخل بطاقة. تم تصميمه ليكون قابل لإعادة الاستخدام في الصفحة الرئيسية وصفحة التفاصيل.
📄 الصفحة السادسة: ProductDetail.jsx
import { useEffect, useState } from "react";
import { useParams, useNavigate } from "react-router-dom";
import ProductItem from "./componants/Product";
function ProductDetail() {
const { prodId } = useParams();
const [product, setProduct] = useState({});
const navigate = useNavigate();
```
useEffect(() => {
fetch(`https://fakestoreapi.com/products/${prodId}`)
.then(res => res.json())
.then(data => setProduct(data));
}, []);
return (
<div className="container mt-5">
<h1>Product Detail</h1>
<ProductItem product={product} allData={true} showButton={false} />
<button className="btn btn-primary w-100" onClick={() => navigate(-1)}>
Go Back
</button>
</div>
);
```
}
export default ProductDetail;
شرح الصفحة
هذه الصفحة تعرض تفاصيل المنتج. يتم قراءة ID من الرابط باستخدام useParams، ثم جلب بيانات المنتج من API.
تم استخدام useNavigate لإضافة زر الرجوع، وهو مهم جدًا لتحسين تجربة المستخدم.
مميزات المتجر
- تنقل سريع باستخدام react-router-dom
- صفحات ديناميكية لكل منتج
- إعادة استخدام المكونات
- واجهة جذابة باستخدام Bootstrap
الخلاصة
باستخدام React و react-router-dom يمكنك بناء متجر إلكتروني احترافي بسهولة. هذا المثال يوضح الأساسيات التي يمكنك البناء عليها لإنشاء مشاريع أكبر وأكثر تعقيدًا.
لمزيد من المقالات : كيف تحافظ على سرية كود Flutter وتقلل حجم التطبيق في نفس الوقت
شاهد أيضًا
مقالات ذات صلة🚫 مانع الإعلانات مفعل
يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع



