ساخت رابط کاربری با React؛ از ایده تا پیادهسازی عملی
ساخت رابط کاربری با React یکی از روشهای پرکاربرد برای توسعه وبسایتها و اپلیکیشنهای تعاملی است. اگر تا امروز با HTML و CSS صفحات وب طراحی کرده باشی، احتمالاً میدانی که ساخت یک صفحه ساده کار دشواری نیست؛ اما وقتی تعداد صفحات، فرمها، جدولها، فیلترها و تعاملات کاربر بیشتر میشود، مدیریت کد به چالش اصلی تبدیل خواهد شد. اینجاست که React وارد میدان میشود و به تو کمک میکند رابط کاربری را به بخشهای کوچک، مستقل و قابل نگهداری تقسیم کنی.
فرض کن میخواهی پنل مدیریتی یک درمانگاه را طراحی کنی. این پنل باید فهرست بیماران را نمایش دهد، امکان جستوجو داشته باشد، فرم ثبت بیمار ارائه کند و وضعیت نوبتها را بهصورت لحظهای نشان دهد. اگر همه این قابلیتها را در یک فایل بزرگ و با دستکاری مستقیم عناصر HTML پیادهسازی کنی، تغییرات آینده دشوار خواهند شد. در مقابل، با React میتوانی هر بخش را به یک کامپوننت مستقل تبدیل کنی و منطق مربوط به آن را در جای مناسب قرار دهی.
البته یک نکته مهم را از همین ابتدا روشن کنیم: React بهتنهایی یک سیستم طراحی کامل یا یک فریمورک همهکاره نیست. React مسئول ساخت رابط کاربری است و برای مسائلی مانند مسیریابی، مدیریت درخواستهای شبکه، استایلدهی و ارتباط با پایگاه داده ممکن است به ابزارهای دیگری نیاز داشته باشی. شناخت درست این مرزها باعث میشود از همان ابتدای پروژه معماری مناسبی انتخاب کنی و بعداً مجبور به بازنویسی بخشهای زیادی از برنامه نشوی.
React چیست و چه نقشی در طراحی رابط کاربری دارد؟
React یک کتابخانه جاوااسکریپت برای ساخت رابطهای کاربری است که بر اساس مفهوم کامپوننتها کار میکند. هر کامپوننت بخشی از رابط را نمایش میدهد و میتواند داده دریافت کند، وضعیت داخلی داشته باشد و در واکنش به رویدادهای کاربر دوباره رندر شود. مستندات رسمی React نیز آموزش خود را بر موضوعاتی مانند ساخت کامپوننت، نمایش داده، رندر شرطی، مدیریت رویدادها و اشتراکگذاری داده متمرکز کردهاند.
React
+1
تفاوت React با HTML، CSS و JavaScript
برای درک بهتر، وظیفه این فناوریها را از یکدیگر جدا کن. HTML ساختار صفحه را مشخص میکند، CSS ظاهر آن را میسازد و JavaScript رفتارهای تعاملی را مدیریت میکند. React از JavaScript برای توصیف رابط کاربری استفاده میکند و به کمک JSX اجازه میدهد ساختار ظاهری و منطق کامپوننت را در یک فایل مرتبط با هم نگه داری.
برای مثال، در یک صفحه ساده HTML ممکن است دکمهای داشته باشی که با کلیک روی آن عددی افزایش پیدا کند. در JavaScript معمولی باید عنصر را پیدا کنی، رویداد کلیک را ثبت کنی و محتوای عنصر را تغییر دهی. اما در React معمولاً وضعیت عدد را نگه میداری و مشخص میکنی که رابط کاربری بر اساس آن وضعیت چگونه نمایش داده شود. با تغییر وضعیت، React بهصورت خودکار بخشهای لازم از رابط را بهروزرسانی میکند.
این تفاوت در پروژههای بزرگ اهمیت بیشتری پیدا میکند. تصور کن یک فهرست شامل صدها بیمار داری و میخواهی با تغییر فیلتر، فقط رکوردهای مرتبط نمایش داده شوند. در React میتوانی دادهها را فیلتر کنی و نتیجه را از طریق JSX نمایش دهی، بدون آنکه برای هر تغییر بهصورت دستی عناصر DOM را جابهجا کنی. البته React جایگزین HTML، CSS یا JavaScript نیست؛ بلکه روشی ساختاریافته برای استفاده از آنها در ساخت رابطهای پویا ارائه میدهد.
چرا معماری کامپوننتمحور اهمیت دارد؟
کامپوننت را مانند یک قطعه مستقل در نظر بگیر که وظیفه مشخصی دارد. در یک داشبورد مدیریتی، سربرگ، منوی کناری، کارت آماری، جدول بیماران و پنجره تأیید حذف میتوانند کامپوننتهای جداگانه باشند. اگر کارت آماری در چند صفحه استفاده شود، لازم نیست ساختار آن را بارها کپی کنی؛ کافی است کامپوننت را یک بار بسازی و دادههای متفاوت را به آن بدهی.
این معماری سه مزیت مهم دارد: استفاده مجدد از کد، آسانتر شدن نگهداری و سادهتر شدن آزمایش بخشهای مختلف برنامه. با این حال، خرد کردن افراطی رابط نیز اشتباه است. اگر برای هر div یک کامپوننت مستقل بسازی، ساختار پروژه بیدلیل پیچیده میشود. مرز مناسب کامپوننت معمولاً جایی است که یک بخش وظیفه مشخص، منطق مستقل یا امکان استفاده مجدد داشته باشد.
پیشنیازهای شروع توسعه رابط کاربری
برای ساخت رابط کاربری با React، بهتر است ابتدا با مفاهیم پایه HTML، CSS، جاوااسکریپت، توابع، آرایهها، آبجکتها و ماژولها آشنا باشی. آشنایی با map، توابع پیکانی، import و export نیز در نوشتن کدهای روزمره React ضروری است. اگر هنوز نمیدانی تفاوت let و const چیست یا چگونه یک تابع جاوااسکریپت مقدار برمیگرداند، بهتر است ابتدا این مباحث را تمرین کنی؛ زیرا React این مفاهیم را حذف نمیکند، بلکه از آنها استفاده میکند.
نصب Node.js و راهاندازی پروژه با Vite
برای یک پروژه جدید React، استفاده از Vite انتخاب مناسبی است. Vite ابزار ساخت پروژه است، نه جایگزین React؛ وظیفه آن فراهم کردن محیط توسعه سریع و آمادهسازی فایلهای نهایی برای انتشار است. راهنمای رسمی React نیز برای شروع از صفر، استفاده از ابزارهایی مانند Vite را معرفی میکند.
React
+1
ابتدا نسخه سازگار Node.js را از وبسایت رسمی آن نصب کن. سپس در ترمینال این دستورات را اجرا کن:
npm create vite@latest clinic-ui -- --template react-ts
cd clinic-ui
npm install
npm run dev
در این مثال، پروژهای با نام clinic-ui و ترکیب React و TypeScript ساخته میشود. اگر فعلاً نمیخواهی TypeScript یاد بگیری، میتوانی قالب react را انتخاب کنی؛ اما برای پروژههای مدیریتی که مدلهای داده، فرمها و ارتباطات پیچیدهتری دارند، TypeScript معمولاً انتخاب مفیدی است.
پس از اجرای دستور آخر، Vite آدرس محلی پروژه را در ترمینال نمایش میدهد. آن آدرس را در مرورگر باز کن تا صفحه اولیه را ببینی. هنگام توسعه، تغییر فایلها معمولاً بدون بارگذاری کامل صفحه منعکس میشود؛ قابلیتی که با نام Hot Module Replacement یا HMR شناخته میشود.
Vite
+1
شناخت ساختار پروژه React
در یک پروژه ساختهشده با Vite، فایلهای اصلی معمولاً در پوشه src قرار دارند. فایل main.tsx نقطه ورود برنامه است و کامپوننت اصلی را به صفحه متصل میکند. فایل App.tsx معمولاً برای ساخت رابط اصلی استفاده میشود و فایلهای CSS مسئول استایلدهی هستند. با بزرگ شدن پروژه، بهتر است کامپوننتها، مدلهای داده، توابع کمکی و صفحات را در پوشههای جداگانه قرار دهی.
فایلهای اصلی و مسئولیت هرکدام
یک ساختار ساده و قابل توسعه میتواند به شکل زیر باشد:
src/
├── components/
│ ├── Header.tsx
│ ├── Sidebar.tsx
│ └── PatientTable.tsx
├── pages/
│ ├── Dashboard.tsx
│ └── Patients.tsx
├── types/
│ └── patient.ts
├── App.tsx
├── main.tsx
└── index.css
این ساختار یک قانون اجباری برای React نیست؛ بلکه الگویی برای تفکیک مسئولیتهاست. کامپوننتهای عمومی در components قرار میگیرند، صفحات اصلی در pages نگهداری میشوند و تعریف نوع دادهها در types انجام میشود. اگر پروژه کوچک باشد، ساختار سادهتری هم کفایت میکند؛ مهم این است که با رشد برنامه، محل قرارگیری هر بخش قابل پیشبینی باقی بماند.
یک اشتباه رایج این است که تمام منطق برنامه، درخواستهای API، فرمها، جدولها و استایلها در یک فایل بزرگ نوشته شوند. این کار در روز اول سریع به نظر میرسد، اما وقتی یک قابلیت باید تغییر کند، احتمال ایجاد خطا در بخشهای نامرتبط افزایش پیدا میکند. از ابتدا به مسئولیت هر فایل فکر کن و هر زمان یک بخش واقعاً وظیفه مستقل پیدا کرد، آن را جدا کن.
طراحی کامپوننتهای قابل استفاده مجدد
برای ساخت یک رابط کاربری حرفهای، باید بتوانی کامپوننتهایی بسازی که هم خوانا باشند و هم بهآسانی در بخشهای دیگر استفاده شوند. در React، کامپوننتهای تابعی یکی از روشهای رایج ساخت رابط هستند. یک کامپوننت میتواند JSX برگرداند و در صورت نیاز، دادههای ورودی خود را از طریق Props دریافت کند.
برای مثال، یک کارت ساده برای نمایش اطلاعات بیمار را در نظر بگیر:
type PatientCardProps = {
name: string;
mobile: string;
};
function PatientCard({ name, mobile }: PatientCardProps) {
return (
{name}
{mobile}
);
}
export default PatientCard;
حالا میتوانی این کامپوننت را در بخشهای مختلف برنامه استفاده کنی:
مزیت این روش آن است که ساختار کارت فقط یک بار تعریف شده است، اما اطلاعات آن میتواند تغییر کند. اگر تصمیم بگیری ظاهر تمام کارتهای بیمار را اصلاح کنی، معمولاً کافی است همان کامپوننت را تغییر دهی. در پروژه واقعی، اطلاعات نمونه بالا باید با دادههای معتبر برنامه جایگزین شوند و اطلاعات شخصی نیز نباید بدون ضرورت در محیطهای عمومی یا آزمایشی منتشر شوند.
مدیریت Props و انتقال داده
Props دادههایی هستند که از کامپوننت والد به کامپوننت فرزند منتقل میشوند. بهتر است کامپوننت را تا جای ممکن قابل پیشبینی نگه داری: داده را دریافت کند و خروجی مناسب ارائه دهد. اگر قرار است فرزند به یک رویداد واکنش نشان دهد، والد میتواند یک تابع نیز از طریق Props در اختیار آن قرار دهد.
برای نمونه، یک جدول بیماران ممکن است آرایهای از بیماران و تابعی برای انتخاب بیمار دریافت کند. جدول مسئول نمایش ردیفهاست، درحالیکه والد میتواند مسئول باز کردن صفحه جزئیات باشد. این جداسازی کمک میکند نمایش داده و تصمیمگیری درباره رفتار برنامه درهم آمیخته نشوند.
اگر یک کامپوننت به Props زیادی نیاز پیدا کند، نامگذاری آنها مبهم شود یا برای نمایش ساده به شرطهای فراوان احتیاج داشته باشد، بهتر است طراحی آن را دوباره بررسی کنی. گاهی تقسیم یک کامپوننت بزرگ به چند بخش کوچکتر راهحل بهتری است؛ گاهی هم استفاده از یک شیء تنظیمات یا Context منطقیتر خواهد بود. انتخاب درست به پیچیدگی واقعی رابط بستگی دارد، نه صرفاً به تعداد خطوط کد.
مدیریت وضعیت رابط کاربری با Hooks
رابط کاربری فقط مجموعهای از عناصر ثابت نیست. کاربر جستوجو میکند، فیلتر انتخاب میکند، فرم را تغییر میدهد و پنجرههای مختلف را باز و بسته میکند. برای نمایش صحیح این تغییرات، React مفهومی به نام State دارد؛ یعنی دادههایی که در طول اجرای برنامه تغییر میکنند و بر خروجی رابط اثر میگذارند.
استفاده از useState و useEffect
Hook به تو اجازه میدهد از قابلیتهای React در کامپوننتهای تابعی استفاده کنی. useState برای نگهداری وضعیت و useEffect برای هماهنگی با سیستمهای بیرونی مانند API، اشتراکها یا برخی قابلیتهای مرورگر کاربرد دارد. نکته مهم این است که useEffect نباید بهصورت خودکار برای هر محاسبه سادهای استفاده شود؛ مستندات رسمی React توصیه میکنند جریان داده داخلی برنامه را بیدلیل به Effect وابسته نکنی.
React
+1
یک نمونه ساده برای مدیریت جستوجوی بیماران:
import { useState } from "react";
type Patient = {
id: number;
name: string;
};
const patients: Patient[] = [
{ id: 1, name: "علی رضایی" },
{ id: 2, name: "مریم احمدی" },
{ id: 3, name: "حسین کریمی" },
];
export default function Patients() {
const [search, setSearch] = useState("");
const filteredPatients = patients.filter((patient) =>
patient.name.includes(search)
);
return (
setSearch(event.target.value)}
placeholder="جستوجوی بیمار..."
/>
{filteredPatients.map((patient) => (
- {patient.name}
))}
);
}
در این کد، مقدار ورودی در State ذخیره میشود و با هر تغییر، فهرست مطابق عبارت جستوجو دوباره محاسبه خواهد شد. استفاده از key پایدار مانند شناسه بیمار نیز به React کمک میکند تغییرات فهرست را درست تشخیص دهد. در این مثال دادهها ثابت هستند؛ در برنامه واقعی، دادهها معمولاً از API یا پایگاه داده دریافت میشوند.
اگر بخواهی فهرست را از سرور دریافت کنی، باید وضعیت بارگذاری، خطا و دادههای دریافتشده را نیز در نظر بگیری. همچنین هنگام استفاده از useEffect برای درخواست شبکه، مدیریت لغو درخواست یا جلوگیری از بهروزرسانی نامعتبر در صورت تغییر سریع صفحه اهمیت دارد. صرفاً اضافه کردن یک Effect بدون توجه به چرخه عمر درخواستها، لزوماً کد مطمئنی تولید نمیکند.
استایلدهی به رابط کاربری React
React روش واحد و اجباری برای استایلدهی ندارد. میتوانی از CSS معمولی، CSS Modules، کتابخانههای کامپوننتی یا ابزارهایی مانند Tailwind CSS استفاده کنی. انتخاب ابزار باید با نیاز پروژه، تجربه تیم و میزان کنترل مورد انتظار بر ظاهر هماهنگ باشد.
CSS، Tailwind CSS و کتابخانههای UI
اگر میخواهی کنترل کاملی بر طراحی داشته باشی و با CSS آشنا هستی، CSS معمولی گزینهای روشن و ساده است. CSS Modules به محدود کردن نام کلاسها در محدوده هر ماژول کمک میکند. Tailwind CSS نیز با استفاده از کلاسهای کاربردی، امکان طراحی مستقیم در JSX را فراهم میکند و برای ساخت رابطهای سفارشی مناسب است؛ هرچند در صورت استفاده بیقاعده، کلاسهای طولانی و تکراری ممکن است خوانایی را کاهش دهند.
برای پنل مدیریتی، بهتر است ابتدا سیستم طراحی سادهای تعریف کنی: رنگ اصلی، رنگ متن، فاصلهها، اندازه گوشهها، سایهها و اندازه فونت. بهجای انتخاب رنگ و فاصله بهصورت تصادفی در هر کامپوننت، از مقادیر مشترک استفاده کن. این کار باعث میشود تمام صفحات یکپارچه به نظر برسند و تغییر ظاهر کلی برنامه نیز آسانتر شود.
برای نمونه، یک کارت ساده با CSS میتواند چنین باشد:
.patient-card {
padding: 16px;
border: 1px solid #dce5e8;
border-radius: 12px;
background: #ffffff;
color: #20333a;
box-shadow: 0 2px 8px rgb(0 0 0 / 5%);
}
.patient-card h3 {
margin: 0 0 8px;
font-size: 1rem;
}
.patient-card p {
margin: 0;
color: #647780;
}
در طراحی فارسی، جهت صفحه، چینش متن، انتخاب فونت مناسب و نمایش صحیح اعداد نیز اهمیت دارد. برای رابط راستچین میتوان از dir="rtl" در سطح مناسب استفاده کرد؛ اما نباید فرض کنی تمام عناصر بهصورت خودکار در همه شرایط درست چیده میشوند. ورودیهای شماره تلفن، کدها و بعضی دادههای لاتین ممکن است به تنظیم جهت جداگانه نیاز داشته باشند.
طراحی فرمها، جدولها و تعاملات کاربر
فرم و جدول در بسیاری از اپلیکیشنهای تجاری بخش اصلی رابط کاربری هستند. یک فرم ثبت بیمار باید ورودیهای مشخص، برچسبهای قابل فهم، پیام خطای روشن و دکمه ثبت داشته باشد. جدول نیز باید دادهها را خوانا نمایش دهد و در صورت نیاز امکاناتی مانند مرتبسازی، جستوجو، صفحهبندی و انتخاب ردیف را فراهم کند.
اعتبارسنجی ورودیها و نمایش خطا
اعتبارسنجی نباید فقط به ظاهر فرم محدود شود. برای مثال، اگر شماره تلفن باید قالب مشخصی داشته باشد، باید ورودی کاربر بررسی شود و خطا به شکلی قابل فهم نمایش داده شود. در یک فرم حرفهای، هنگام ارسال اطلاعات نامعتبر، کاربر باید بفهمد کدام فیلد مشکل دارد و چگونه آن را اصلاح کند؛ پیامهایی مانند «اطلاعات نامعتبر است» بدون اشاره به علت، تجربه کاربری خوبی ایجاد نمیکنند.
با این حال، اعتبارسنجی سمت کاربر جای اعتبارسنجی سمت سرور را نمیگیرد. کاربر میتواند درخواستهای HTTP را مستقیماً ارسال کند یا کد رابط را دور بزند؛ بنابراین کنترلهای مهم مانند دسترسی به اطلاعات، صحت دادهها و مجوز حذف یا ویرایش باید در سمت سرور نیز بررسی شوند.
در جدولها نیز تنها نمایش داده کافی نیست. بهتر است حالت بارگذاری، نتیجه خالی، خطای دریافت اطلاعات و وضعیت عملیات را طراحی کنی. اگر کاربر جستوجو میکند و هیچ نتیجهای وجود ندارد، باید پیامی روشن ببیند؛ اگر سرور پاسخ نداده، نباید همان وضعیت را بهعنوان «هیچ بیماری یافت نشد» نمایش دهی. این دو حالت معنای متفاوتی دارند و رابط کاربری باید این تفاوت را بهدرستی منعکس کند.
واکنشگرایی و دسترسپذیری رابط کاربری
یک رابط کاربری خوب باید در اندازههای مختلف صفحه قابل استفاده باشد. در طراحی واکنشگرا، چیدمان بر اساس عرض صفحه تغییر میکند تا اطلاعات روی موبایل، تبلت و دسکتاپ خوانا باقی بمانند. برای مثال، یک جدول عریض ممکن است در صفحه بزرگ تمام ستونها را نشان دهد، اما در صفحه کوچک به اسکرول افقی یا نمایش خلاصه اطلاعات نیاز داشته باشد.
از ابتدا اندازههای مختلف صفحه را آزمایش کن و تنها به ظاهر برنامه روی مانیتور خودت اکتفا نکن. دکمهها باید فضای کافی برای لمس داشته باشند، فرمها نباید از صفحه بیرون بزنند و منوی کناری باید در نمایشگر کوچک رفتار مناسبی داشته باشد. استفاده از Flexbox و CSS Grid میتواند طراحی چیدمانهای انعطافپذیر را سادهتر کند.
دسترسپذیری نیز بخشی از کیفیت رابط است، نه یک قابلیت تزئینی. ورودیها باید برچسب قابل تشخیص داشته باشند، دکمهها با صفحهکلید قابل استفاده باشند، رنگ بهتنهایی حامل اطلاعات نباشد و پیامهای خطا برای کاربران فناوریهای کمکی قابل فهم باشند. بهعنوان مثال، اگر وضعیت نوبت تنها با رنگ قرمز و سبز مشخص شده باشد، بخشی از کاربران ممکن است تفاوت آنها را تشخیص ندهند؛ افزودن متن «لغوشده» یا «تأییدشده» این مشکل را کاهش میدهد.
بهینهسازی عملکرد و امنیت رابط کاربری
کند بودن رابط کاربری همیشه به معنی نیاز به ابزارهای پیچیده نیست. ابتدا باید مشخص کنی چه چیزی واقعاً کند است: آیا حجم داده زیاد است؟ آیا درخواست شبکه دیر پاسخ میدهد؟ آیا محاسبهای سنگین در هر رندر تکرار میشود؟ یا تعداد زیادی کامپوننت بدون نیاز دوباره رندر میشوند؟ اندازهگیری و بررسی رفتار واقعی برنامه از افزودن بیهدف ابزارهای بهینهسازی مؤثرتر است.
React ابزارهایی مانند useMemo و useCallback را برای برخی سناریوهای بهینهسازی در اختیار توسعهدهنده قرار میدهد، اما استفاده از آنها در همه توابع ضروری نیست. useMemo میتواند نتیجه محاسبهای پرهزینه را در شرایط مناسب ذخیره کند و useCallback برای حفظ هویت تابع در بعضی الگوهای انتقال Props کاربرد دارد. این ابزارها نباید جای طراحی درست دادهها و کامپوننتها را بگیرند.
React
+1
در پروژههایی که فهرست بزرگی از رکوردها دارند، صفحهبندی سمت سرور یا مجازیسازی فهرست میتواند از رندر شدن تعداد زیادی عنصر غیرضروری جلوگیری کند. بارگذاری تنبل صفحات و اجزای سنگین نیز ممکن است حجم کد اولیه را کاهش دهد. با این حال، بهینهسازی باید بر اساس اندازهگیری انجام شود؛ اگر یک فهرست فقط ده رکورد دارد، پیادهسازی معماری پیچیده برای آن معمولاً توجیهی ندارد.
از نظر امنیتی، اطلاعات محرمانه و کلیدهای خصوصی را در کد فرانتاند قرار نده. هر چیزی که به مرورگر ارسال میشود، بالقوه برای کاربر قابل مشاهده است. همچنین برای نمایش محتوای واردشده توسط کاربر، از روشهای امن استفاده کن و از قرار دادن HTML ناشناس با ابزارهایی مانند dangerouslySetInnerHTML بدون پاکسازی معتبر پرهیز کن. رابط کاربری ممکن است تجربه امنتری فراهم کند، اما تصمیمهای امنیتی اصلی باید با کنترل دسترسی و اعتبارسنجی سمت سرور پشتیبانی شوند.
ساخت و انتشار نسخه نهایی پروژه
پس از تکمیل رابط کاربری، باید نسخه آماده انتشار را بسازی و بررسی کنی. در پروژه Vite، دستور معمول ساخت خروجی نهایی چنین است:
npm run build
در قالب استاندارد Vite، فایلهای خروجی معمولاً در پوشه dist قرار میگیرند. این فایلها را میتوان روی یک وبسرور یا سرویس میزبانی مناسب منتشر کرد. راهنمای رسمی Vite توضیح میدهد که فرایند Build داراییهای پروژه را برای انتشار آماده میکند.
Vite
+1
قبل از انتشار، برنامه را در حالت تولید آزمایش کن. مسیرهای صفحه، درخواستهای API، بارگذاری فونتها، تصاویر، فرمها و رفتار رابط در اندازههای مختلف صفحه باید بررسی شوند. همچنین اگر برنامه روی مسیری غیر از ریشه دامنه منتشر میشود، تنظیمات مسیر پایه و مسیریابی باید متناسب با محیط استقرار باشد؛ در غیر این صورت ممکن است فایلهای CSS و JavaScript با خطای 404 بارگذاری نشوند.
اگر هدفت ساخت اپلیکیشن دسکتاپ است، React میتواند رابط کاربری آن را بسازد، اما بهتنهایی فایل اجرایی ویندوز تولید نمیکند. برای مثال، میتوان رابط React را با Tauri ترکیب کرد تا برنامه دسکتاپی بسازی و بخشهای بومی را با قابلیتهای Tauri پیادهسازی کنی. در این معماری، React مسئول رابط است و Tauri محیط اجرای دسکتاپ و دسترسی کنترلشده به قابلیتهای سیستم را فراهم میکند. انتخاب این روش به نیازهای واقعی نرمافزار بستگی دارد؛ یک وبسایت معمولی لزوماً به بستهبندی دسکتاپ احتیاج ندارد.