شرح انشاء React TypeScript احترافي خطوة بخطوة
في عالم تطوير الويب الحديث، أصبحت تقنيات مثل React و TypeScript و Next.js من أهم الأدوات التي يعتمد عليها المطورون لبناء تطبيقات ويب عالية الأداء وقابلة للتطوير.
يعد Next.js TypeScript خيارًا ممتازًا للمطورين الذين يرغبون في إنشاء تطبيقات احترافية تجمع بين قوة React، وتنظيم TypeScript، ومميزات Next.js مثل التقديم من جانب الخادم SSR والتوليد الثابت SSG والتنقل السريع بين الصفحات.
في هذا المقال سنتعلم كيفية إنشاء مشروع Next.js مع TypeScript، ثم نشرح المكونات Components، والتنقل بين الصفحات باستخدام Link، وطريقة استخدام Conditional Rendering، بالإضافة إلى أهم React Hooks مثل useState و useRef و useEffect.
لماذا نستخدم Next.js مع TypeScript؟
أداء ممتاز
يوفر Next.js ميزات مثل Server Side Rendering و Static Site Generation، مما يساعد على تحسين سرعة الموقع وتجربة المستخدم.
سلامة الكود
يساعد TypeScript في تقليل الأخطاء من خلال تحديد أنواع البيانات قبل تشغيل التطبيق.
تجربة تطوير أفضل
يوفر Next.js إعدادات جاهزة تساعدك على بدء المشروع بسرعة دون الحاجة إلى إعدادات معقدة.
جاهزية للإنتاج
المشروع الذي يتم إنشاؤه باستخدام Next.js يكون مناسبًا للتطوير والنشر بشكل احترافي.
المتطلبات الأساسية قبل البدء
– تثبيت Node.js إصدار 14.6.0 أو أحدث – توفر npm أو yarn – استخدام محرر كود مثل VS Code – معرفة بسيطة بأساسيات JavaScript و React
إنشاء مشروع Next.js جديد مع TypeScript
npx create-next-app@latest my-app --ts

هذا الأمر يقوم بإنشاء مشروع Next.js جديد باسم my-app مع دعم TypeScript بشكل مباشر.
بعد انتهاء التثبيت، انتقل إلى مجلد المشروع:
cd my-app
ثم قم بتشغيل خادم التطوير:
npm run dev
بعد ذلك يمكنك فتح المتصفح على الرابط:
http://localhost:3000
ما هي Components في React و Next.js؟
يمكنك إنشاء مجلد باسم components ثم إنشاء ملفات مثل:
– Header.tsx – Desc.tsx
مثال على Header Component
type HeaderProps = {
title: string;
};
function Header(props: HeaderProps) {
return <p>{props.title}</p>;
}
export default Header;
في هذا المثال قمنا بإنشاء مكون Header يستقبل خاصية title من نوع string، ثم يعرضها داخل عنصر p.
مثال على Desc Component
type DescProps = {
esm: string;
};
function Desc(props: DescProps) {
return (
<>
<div>{props.esm}</div>
<div>{props.esm}</div>
</>
);
}
export default Desc;
هذا المكون يستقبل قيمة باسم esm ويعرضها أكثر من مرة داخل الصفحة.
استخدام Components داخل الصفحة الرئيسية
import Header from '../components/Header';
import Desc from '../components/Desc';
import Link from 'next/link';
function App() {
return (
<main>
<Header title="This is the header" />
<Desc esm="This is the esm prop value" />
<Link href="/about">Go to About</Link>
<Link href="/counter">Go to Counter</Link>
</main>
);
}
export default App;

بهذا الشكل يصبح الكود منظمًا، ويمكن إعادة استخدام Header و Desc في أكثر من صفحة.
استخدام Link في Next.js
مثال:
import Link from 'next/link';
<Link href="/about">Go to About</Link>
لكي يعمل الرابط، يجب إنشاء صفحة باسم about داخل مجلد pages أو app حسب طريقة إعداد مشروعك.
طرق إضافة Style في Next.js
الطريقة الأولى: Inline Style
<div style={{ color: "black", backgroundColor: "white" }}>
About Page
</div>
الطريقة الثانية: CSS Modules
import Style from '../styles/Home.module.css';
<div className={Style.aboutPage}>
About Page
</div>
تعد CSS Modules طريقة منظمة لأنها تمنع تعارض أسماء الكلاسات بين الصفحات.
شرح Conditional Rendering
مثال:
{hideContent ? null : <h1>About Page</h1>}
إذا كانت قيمة hideContent تساوي true فلن يتم عرض شيء، أما إذا كانت false فسيتم عرض العنوان.
مثال كامل:
import Link from 'next/link';
import Style from '../styles/Home.module.css';
function AboutPage() {
let hideContent = false;
return (
<div className={Style.aboutPage}>
{hideContent ? null : <h1>About Page</h1>}
<button onClick={() => {
hideContent = !hideContent;
}}>
Toggle
</button>
<Link href="/">Go to Home</Link>
</div>
);
}
export default AboutPage;
لكن يجب الانتباه أن تغيير let وحدها لا يعيد بناء الواجهة، لذلك الأفضل استخدام useState.
شرح useState في React
مثال:
const [counter, setCounter] = useState(0);
هنا counter هو المتغير، و setCounter هي الدالة المسؤولة عن تحديثه.
شرح useRef في React
مثال:
const inputRef = useRef<HTMLInputElement>(null);
const handleFocus = () => {
inputRef.current?.focus();
};
بهذا الشكل يمكننا التركيز على حقل الإدخال مباشرة عند الضغط على زر معين.
شرح useEffect في React
مثال:
useEffect(() => {
console.log("Counter value changed:", counter);
}, [counter]);
هذا الكود يعمل كلما تغيرت قيمة counter.
كود كامل لصفحة Counter باستخدام Hooks
'use client';
import { useEffect, useRef, useState } from "react";
function Home() {
const [counter, setCounter] = useState(0);
const [success, setSuccess] = useState(false);
const inputRef = useRef<HTMLInputElement>(null);
const handleIncrement = () => {
setCounter(counter + 1);
};
const handleFocus = () => {
inputRef.current?.focus();
};
useEffect(() => {
console.log("Counter value changed:", counter);
}, [counter]);
return (
<div>
<h1>Counter: {counter}</h1>
<input ref={inputRef} type="text" placeholder="Focus me" />
<button onClick={handleIncrement}>Increment</button>
<button onClick={handleFocus}>Focus</button>
<button onClick={() => {
console.log("Input value:", inputRef.current?.value);
}}>
Print Value
</button>
</div>
);
}
export default Home;
ملاحظات مهمة عند استخدام Next.js TypeScript
– استخدم أسماء واضحة للمكونات – افصل Components في مجلد مستقل – استخدم TypeScript لتعريف Props – لا تستخدم let لتحديث الواجهة، بل استخدم useState – استخدم Link بدلًا من a للتنقل الداخلي – قسم الكود إلى ملفات صغيرة لسهولة الصيانة
أفضل استخدامات Next.js TypeScript
– مواقع الشركات – لوحات التحكم Dashboard – المتاجر الإلكترونية – المدونات – تطبيقات SaaS – مواقع تعليمية
لأن Next.js يوفر أداء قويًا، وTypeScript يمنحك كودًا أكثر أمانًا وتنظيمًا.
رابط المقال
الخلاصة
من خلال هذا المقال تعلمنا كيفية إنشاء مشروع Next.js جديد، وكيفية استخدام Components، والتنقل بين الصفحات باستخدام Link، وتطبيق Conditional Rendering، بالإضافة إلى شرح Hooks مهمة مثل useState و useRef و useEffect.
إذا كنت ترغب في تطوير مهاراتك في React وبناء تطبيقات جاهزة للإنتاج، فإن تعلم Next.js TypeScript خطوة مهمة جدًا في رحلتك كمطور ويب.
مزيد من المقالات : شرح Day Night Switch في Jetpack Compose (Compose Multiplatform) مع مثال عملي
