در حال دریافت اطلاعات ...
متن رفرنس
ابهام و نکته ظریف دو نکته قبلی
باید بدانیم که Next.js در سمت سرور، صفحه را در دو مرحله مجزا آماده میکند:
مرحله ۱: تولید ساختار داده (RSC Payload) -> اینجاست که قانون «جعبه سیاه» صدق میکند
در این مرحله، React در حال ساخت یک نقشه درختی (JSON-مانند) از اجزای سایت شماست.
وقتی به Server Componentها میرسد، آنها را اجرا میکند و دیتا را داخل این نقشه میگذارد.
وقتی به مرز 'use client' میرسد، متوقف میشود. در این مرحله، React میگوید: “این یک جعبه سیاه است. من کدهای درون این کامپوننت را اجرا نمیکنم، فقط یک جایخالی (Placeholder) در نقشه میگذارم تا مرورگر بداند بعداً باید فایل JS این بخش را دانلود و اجرا کند.”
در پیامی که دیروز به شما دادم، دقیقاً داشتم این مرحله (معماری React Server Components) را توضیح میدادم.
مرحله ۲: تولید HTML (مرحله SSR) -> اینجاست که جلوی پرش (Flicker) گرفته میشود
اگر Next.js همان خروجی مرحله قبل را به مرورگر بفرستد، کاربر یک صفحه سفید میبیند تا زمانی که جاوااسکریپت لود شود.
بنابراین، Next.js یک مرحله دیگر روی سرور انجام میدهد: آن نقشه (RSC Payload) را با وضعیت اولیه (Initial State) کلاینت کامپوننتها ترکیب میکند و یک رشته متنی HTML ثابت میسازد. در این مرحله، سرور به کدهای کلاینتی نگاه میکند تا فقط بداند چه HTML اولیهای بسازد (بدون اینکه منطق تعاملی مثل onClick را فعال کند).
خلاصه:
تناقضی وجود ندارد، فقط مفاهیم با هم قاطی شدهاند.
کلاینت کامپوننتها از نظر معماری دیتای React (مرحله ۱) یک جعبه سیاه هستند و منطق آنها هرگز جزو کدهای سروری محسوب نمیشود (کد جاوااسکریپتشان به مرورگر میرود).
اما همان کلاینت کامپوننتها در لحظه آخر (مرحله ۲) توسط سرور به HTML تبدیل میشوند (SSR میشوند) تا رابط کاربری بدون پرش (Flicker) و به صورت کامل به کاربر نمایش داده شود.
به زبان ساده در دنیای Next.js:
کلاینت کامپوننتها “Server Component” نیستند، اما روی سرور “SSR” میشوند.
دقت شما در پیدا کردن این تضادِ ظاهری بسیار عالی و کاملاً بجا بود!
عنوان کارت
پاسخ