TypeScript

استخدام TypeScript مع React: دليل شامل

5 مارس 2023
10 دقائق
استخدام TypeScript مع React: دليل شامل
يعقوب الحيدري

يعقوب الحيدري

مطور واجهة أمامية

TypeScript يضيف أنواع ثابتة إلى JavaScript، مما يساعد في اكتشاف الأخطاء أثناء التطوير. في هذا المقال، سنتعلم كيفية استخدام TypeScript مع React لبناء تطبيقات أكثر أمانًا.

مقدمة

TypeScript هو لغة برمجة مفتوحة المصدر طورتها Microsoft، وهي عبارة عن امتداد لـ JavaScript يضيف أنواع ثابتة وميزات أخرى لتحسين تجربة التطوير وجودة الكود. عند استخدام TypeScript مع React، يمكنك الاستفادة من التحقق من الأنواع لتجنب الأخطاء الشائعة وتحسين قابلية الصيانة.

لماذا نستخدم TypeScript مع React؟

  • اكتشاف الأخطاء مبكرًا: يساعد TypeScript في اكتشاف الأخطاء أثناء التطوير بدلاً من وقت التشغيل.
  • تحسين تجربة التطوير: توفير اقتراحات واكتمال تلقائي أفضل في محررات الكود.
  • توثيق أفضل: تعمل الأنواع كشكل من أشكال التوثيق، مما يسهل فهم الكود.
  • تحسين قابلية الصيانة: يجعل الكود أكثر قابلية للصيانة، خاصة في المشاريع الكبيرة.

إعداد مشروع React مع TypeScript

لإنشاء مشروع React جديد مع TypeScript، يمكنك استخدام Create React App مع قالب TypeScript:

bash
npx create-react-app my-app --template typescript
cd my-app
npm start

إذا كنت تستخدم Next.js، يمكنك إنشاء مشروع Next.js مع TypeScript كما يلي:

bash
npx create-next-app@latest --ts my-next-app
cd my-next-app
npm run dev

تعريف الأنواع في React

# تعريف أنواع Props

يمكنك تعريف أنواع Props لمكونات React باستخدام واجهات (interfaces) أو أنواع (types):

tsx
interface ButtonProps {
  text: string;
  onClick: () => void;
  disabled?: boolean;
  variant?: 'primary' | 'secondary' | 'danger';
}

function Button({ text, onClick, disabled = false, variant = 'primary' }: ButtonProps) {
  return (
    <button
      onClick={onClick}
      disabled={disabled}
      className={`btn btn-${variant}`}
    >
      {text}
    </button>
  );
}

# تعريف أنواع State

يمكنك تعريف أنواع State عند استخدام useState:

tsx
import { useState } from 'react';

interface User {
  id: number;
  name: string;
  email: string;
}

function UserProfile() {
  const [user, setUser] = useState<User | null>(null);
  const [loading, setLoading] = useState<boolean>(true);

  // ...

  return (
    <div>
      {loading ? (
        <p>جاري التحميل...</p>
      ) : user ? (
        <div>
          <h2>{user.name}</h2>
          <p>{user.email}</p>
        </div>
      ) : (
        <p>لم يتم العثور على المستخدم</p>
      )}
    </div>
  );
}

# استخدام أنواع React المدمجة

توفر React العديد من الأنواع المدمجة التي يمكنك استخدامها:

tsx
import { ReactNode, ChangeEvent, FormEvent } from 'react';

interface FormProps {
  children: ReactNode;
  onSubmit: (data: FormData) => void;
}

function Form({ children, onSubmit }: FormProps) {
  const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
    e.preventDefault();
    // ...
  };

  const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
    // ...
  };

  return (
    <form onSubmit={handleSubmit}>
      {children}
    </form>
  );
}

استخدام TypeScript مع Hooks

# useState

tsx
const [count, setCount] = useState<number>(0);
const [user, setUser] = useState<User | null>(null);

# useRef

tsx
const inputRef = useRef<HTMLInputElement>(null);

# useReducer

tsx
type State = {
  count: number;
  loading: boolean;
  error: string | null;
};

type Action =
  | { type: 'INCREMENT' }
  | { type: 'DECREMENT' }
  | { type: 'SET_LOADING'; payload: boolean }
  | { type: 'SET_ERROR'; payload: string };

function reducer(state: State, action: Action): State {
  switch (action.type) {
    case 'INCREMENT':
      return { ...state, count: state.count + 1 };
    case 'DECREMENT':
      return { ...state, count: state.count - 1 };
    case 'SET_LOADING':
      return { ...state, loading: action.payload };
    case 'SET_ERROR':
      return { ...state, error: action.payload };
    default:
      return state;
  }
}

function Counter() {
  const [state, dispatch] = useReducer(reducer, {
    count: 0,
    loading: false,
    error: null,
  });

  // ...
}

الخلاصة

استخدام TypeScript مع React يوفر العديد من الفوائد، بما في ذلك اكتشاف الأخطاء مبكرًا، وتحسين تجربة التطوير، وتوثيق أفضل، وتحسين قابلية الصيانة. من خلال تعريف أنواع Props و State واستخدام أنواع React المدمجة، يمكنك بناء تطبيقات React أكثر أمانًا وقابلية للصيانة.

مع قليل من الممارسة، ستصبح كتابة TypeScript مع React أمرًا طبيعيًا وستلاحظ تحسنًا كبيرًا في جودة الكود وتجربة التطوير.

TypeScript
React
JavaScript
Web Development

مقالات ذات صلة

كيفية بناء واجهة مستخدم جذابة باستخدام React
React

كيفية بناء واجهة مستخدم جذابة باستخدام React

في هذا المقال، سنتعرف على كيفية بناء واجهة مستخدم جذابة وسهلة الاستخدام باستخدام مكتبة React وبعض المكتبات المساعدة مثل Tailwind CSS.

10 يناير 2023
5 دقائق
مقدمة في Next.js: إطار العمل المثالي لتطبيقات React
Next.js

مقدمة في Next.js: إطار العمل المثالي لتطبيقات React

Next.js هو إطار عمل مبني على React يوفر ميزات مثل توجيه الصفحات والتحميل المسبق والتوليد الثابت. في هذا المقال، سنتعرف على أساسيات Next.js وكيفية البدء في استخدامه.

15 فبراير 2023
7 دقائق
تحسين أداء تطبيقات React: نصائح وحيل
React

تحسين أداء تطبيقات React: نصائح وحيل

في هذا المقال، سنتعرف على بعض النصائح والحيل لتحسين أداء تطبيقات React، مثل استخدام React.memo و useMemo و useCallback.

15 يونيو 2023
9 دقائق

اشترك في النشرة الإخبارية

احصل على أحدث المقالات والتحديثات مباشرة في بريدك الإلكتروني

لن نرسل لك أي رسائل غير مرغوب فيها. يمكنك إلغاء الاشتراك في أي وقت.