فهرست سرفصل‌های React
خانه (Home) مقدمه (Intro) شروع کار (Get Started) اولین اپ (First App) رندر HTML (Render HTML) ارتقا (Upgrade) آشنایی با ES6 (ES6) کلاس ها در ES6 (ES6 Classes) توابع پیکانی ES6 (ES6 Arrow Functions) متغیرها در ES6 (ES6 Variables) متد map روی آرایه ها (ES6 Array map()) دیس ترکچرینگ (تقسیم ساختاری) (ES6 Destructuring) عملگر پخش (Spread) (ES6 Spread Operator) ماژول ها در ES6 (ES6 Modules) عملگر سه تایی (Ternary) (ES6 Ternary Operator) رشته های قالبی (Template Strings) (ES6 Template Strings) مقدمه JSX (JSX Intro) عبارت ها در JSX (JSX Expressions) خصیصه ها در JSX (JSX Attributes) شرط ها در JSX (JSX If Statements) کامپوننت ها (Components) کلاس ها (Class) پراپس ها (Props) (Props) دیس ترکچرینگ پراپس ها (Props Destructuring) پراپس children (Props Children) رویدادها (Events) رندر شرطی (Conditionals) لیست ها (Lists) فرم ها (Forms) ارسال فرم (Forms Submit) فیلد Textarea (Textarea) فیلد Select (Select) چند ورودی در فرم (Multiple Inputs) چک باکس (Checkbox) دکمه های رادیویی (Radio) پورتال ها (Portals) Suspense (Suspense) استایل دهی با CSS (CSS Styling) CSS Modules (CSS Modules) CSS-in-JS (CSS-in-JS) مسیریابی (Router) (Router) ترنزیشن ها (Transitions) (Transitions) Forward Ref (Forward Ref) کامپوننت های مرتبه بالاتر (HOC) (HOC) استایل دهی با Sass (Sass) هوکس چیست؟ (What is Hooks?) هوک useState (useState) هوک useEffect (useEffect) هوک useContext (useContext) هوک useRef (useRef) هوک useReducer (useReducer) هوک useCallback (useCallback) هوک useMemo (useMemo) هوک های سفارشی (Custom Hooks) کامپایلر (Compiler) کوئیز (آزمون کوتاه) (Quiz) تمرین ها (Exercises) سیلابس (سرفصل دوره) (Syllabus) برنامه مطالعه (Study Plan) سرور (Server) آمادگی مصاحبه (Interview Prep) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
React

React — رندر HTML (Render HTML)

آخرین بروزرسانی: 1404/08/24

رندر HTML (Render HTML)

در این صفحه مفهوم رندر HTML در ری اکت را می بینیم. یعنی React چطور کد JSX را می گیرد و روی صفحه وب نشان می دهد. تمرکز ما روی کانتینر، تابع createRoot و متد render است.

کانتینر رندر HTML در ری اکت

هدف اصلی ری اکت این است که HTML را داخل صفحه وب نشان بدهد. این کار همیشه داخل یک کانتینر انجام می شود. کانتینر در واقع یک تگ HTML است که جای نمایش را مشخص می کند.

در پروژه های Vite معمولا این کانتینر یک تگ <div id="root"></div> است. این تگ داخل فایل index.html قرار دارد. همچنین یک اسکریپت هم وجود دارد که فایل main.jsx را لود می کند.

اگر فقط بخش مهم را نگه داریم، ساختار ساده index.html این شکلی است: یک <div id="root"> و یک <script> که کد React را اجرا می کند. بقیه چیزها مثل عنوان و آیکون فقط تزئینی هستند.

تابع createRoot برای رندر HTML

تابع createRoot() داخل فایل src/main.jsx قرار دارد. این تابع از کتابخانه react-dom/client می آید. کارش این است که به ری اکت بگوید روی کدام کانتینر کار کند.

در نسخه ساده، می توانیم همه چیز را پاک کنیم و یک مثال Hello React بسازیم. کد تقریبا شبیه نمونه منبع است؛ فقط کمی مرتب شده است:

import { createRoot } from 'react-dom/client';

createRoot(document.getElementById('root')).render(
  <h1>Hello React!</h1>
);

مشاهده در ادیتور

اینجا document.getElementById('root') همان کانتینر HTML است. تابع createRoot() روی این کانتینر یک ریشه React می سازد. سپس متد render() مشخص می کند چه JSX داخل این ریشه نمایش داده شود.

متد render و نمایش HTML ساده

متد render() تعیین می کند دقیقا چه چیزی داخل کانتینر نمایش داده شود. در مثال بالا یک تگ <h1> رندر کردیم. حالا یک مثال دیگر با پاراگراف Welcome می بینیم که در منبع هم وجود داشت:

import { createRoot } from 'react-dom/client';

createRoot(document.getElementById('root')).render(
  <p>Welcome!</p>
);

مشاهده در ادیتور

باز هم همان الگو را می بینی. اول کانتینر را با id برابر root می گیریم. بعد با createRoot یک ریشه می سازیم. در نهایت با render یک JSX ساده را به صفحه می فرستیم.

استفاده از JSX برای رندر HTML پیچیده تر

در React از JSX استفاده می کنیم تا HTML را وسط جاوااسکریپت بنویسیم. JSX در ظاهر شبیه HTML است، اما در واقع یک سینتکس مخصوص React است. مرورگر JSX را مستقیم نمی فهمد؛ ابزار ساخت آن را به جاوااسکریپت معمولی تبدیل می کند.

در منبع یک مثال هست که یک جدول را داخل یک متغیر JSX نگه می دارد. بعد همان متغیر را رندر می کند:

import { createRoot } from 'react-dom/client';

const myelement = (
  <table>
    <tr>
      <th>Name</th>
    </tr>
    <tr>
      <td>John</td>
    </tr>
    <tr>
      <td>Elsa</td>
    </tr>
  </table>
);

createRoot(document.getElementById('root')).render(
  myelement
);

مشاهده در ادیتور

اینجا متغیر myelement شامل یک جدول کامل است. سپس همان متغیر را به render می دهیم. ری اکت این JSX را گرفته و به HTML واقعی تبدیل می کند. بعد HTML را داخل همان کانتینر رندر HTML در ری اکت قرار می دهد.

ریشه React فقط root نیست

نکته مهم این است که id کانتینر الزاما root نیست. این فقط یک قرارداد رایج است. در منبع مثالی وجود دارد که از یک تگ <header id="sandy"> استفاده می کند. یعنی ریشه React در یک تگ header قرار می گیرد، نه div.

در آن مثال، فایل index.html یک header با id برابر sandy دارد. سپس در main.jsx این دستور نوشته شده است که همان متن Welcome را در header رندر کند. ساختار کلی همچنان همان createRoot و render است.

نکته: مهم این است که id در HTML و جاوااسکریپت یکسان باشد. پس اگر از 'sandy' استفاده می کنی، باید دقیقا همان را به getElementById بدهی.

ابزار Show React در منبع اصلی

سایت منبع برای این مثال ها یک ابزار به نام Show React دارد. آنجا همان کد را می نویسی و روی دکمه Run Example کلیک می کنی. نتیجه دقیقا مثل پروژه واقعی روی صفحه نمایش داده می شود.

مثال پاراگراف Welcome و مثال جدول، هر دو در این ابزار هم قرار دارند. لینک های Run Example که در منبع دیده می شود دقیقا به همین محیط می رود.

مسیر بعدی بعد از رندر HTML

حالا می دانی رندر HTML در ری اکت چطور انجام می شود. می توانی دوباره به صفحه اولین اپ ری اکت برگردی و کدها را با این دانش تازه نگاه کنی. همچنین در صفحات دیگر، هر وقت دیدی از رندر HTML در ری اکت حرف می زنیم، منظور همین الگوی createRoot و render است.

برای ادامه مسیر، فصل های بعدی مثل ارتقای پروژه و مباحث JSX عمیق تر هستند. قبل از آن می توانی یک مرور سریع روی مقدمه React انجام بدهی تا تصویر کلی کامل تر شود.

جمع بندی سریع

  • ری اکت همیشه داخل یک کانتینر HTML رندر می کند.
  • تابع createRoot ریشه React را روی کانتینر می سازد.
  • متد render تعیین می کند چه JSX روی صفحه دیده شود.
  • می توانی JSX ساده یا پیچیده را داخل متغیر نگه داری.
  • id کانتینر لازم نیست root باشد، فقط باید هماهنگ باشد.