Svelte / المتوسط: مسارات Kit وسياسة بيانات الخادم / الدرس 11
السياق والمخازن وعزل حالة الطلب
اختر مشاركة الحالة بحسب المالك والعمر بدلاً من تصدير حالة خاصة متغيرة من وحدة خادم.
في هذه الصفحة
أهداف الدرس
- ميز سياق المكونات والمخازن وبيانات الخادم الخاصة بالطلب.
- احفظ الوصول للقيمة الحالية والملكية المتداخلة مع إعادة استخدام المكون.
لا تعني API مشتركة حالة خاصة عامة
تقدم الوحدة أوالمخزن واجهة مفيدة ويحدد الإنشاء عمر المثيل. قد يشترك طلبان بمخزن مستخدم عام بالخادم. يتيح سياق المكون للأبناء قيمة يملكها الجد، وتخص locals طلب الخادم؛ تختلف الحلول. تقلل runes بعض الحاجة التاريخية للمخزن وتبقى واجهات الاشتراك مفيدة. لا تستبدل الجميع آلياً أوتعد rune مصدرة من وحدة خادم معزولة تلقائياً. يراجع التصميم من يخلق الحالة ومن يتلقاها ومتى تتقاعد، فاختيار API تفاعلية لا يغير ملكية ذاكرة عاشت أطول من صاحب الطلب.
قدم البيانات الحالية عبر getter بنطاق
يضبط التخطيط السياق أثناء التهيئة ويمرر getter لبيانات catalog الحالية. يفترض رمزاً مستقراً وdata وchildren من الإطار. يتجنب getter تجميد أول قيمة مع إعادة التخطيط؛ يستهلك الابن الرمز نفسه ويقرأ تفاعلياً. لم ينشأ سياق حقيقي. ليست getter متحقق اعتماد وتعيد نموذجاً مسموحاً لا عميل خادم أوإعداداً خاصاً. ينبغي أن يحفظ المستهلك معنى القراءة الحالية لا يستدعي getter مرة ثم يتوقع أن نسخته المحلية مستقلة ستتابع المصدر لاحقاً دون علاقة تفاعلية أخرى.
<script>
import { setContext } from "svelte";
import { CATALOG_CONTEXT } from "#lib/context-key.js";
let { data, children } = $props();
setContext(CATALOG_CONTEXT, () => data.catalog);
</script>
{@render children()}
يفترض الرمز المشترك والبيانات العامة ولم ينفذ بحث سياق أوإعادة تخطيط.
وضح ملكية الاشتراك والمرجع المتغير
يتضمن عقد المخزن الاشتراك والتنظيف لا حقلاً فقط. تنتمي صياغته الآلية للسياق المترجم، ولا يصير كائن مشابه مخزناً. لا ينسخ السياق العمق؛ قد يشترك الأبناء بكائن متغير. حدد الثابت وحالة شجرة أوطلب واحد، واحفظ علاقة الحالي عند استبدال الكائن بدل مرجع قديم. اختبر العمر وإلغاء الاشتراك لا أول قيمة فقط. هذا مهم عند تبدل الهوية أوإعادة استخدام التخطيط، إذ قد تبقى واجهة اشتراك سليمة تقنياً لكنها مرتبطة بمورد يملكه الحساب السابق.
خصص حالة متداخلة مستقلة لكل مالك
ينشئ المصنع غلاف هوية وخريطة جديدين لكل مالك، ولا يغير تحرير واحدة الأخرى. يفحص التخصيص ويتجنب مشاركة المتداخل. ليس اختبار سياق أوstore أوSSR. قد يشارك الحقيقي تعريف خدمة ثابتاً لا اعتماد طلب أومسودة دون بروتوكول. ميز القيم غير المتغيرة وحالة عملية واحدة؛ لا يعزل الغلاف الجديد مرجعاً داخلياً مشتركاً. افحص الملكية الفعلية والطلبات مستقلاً. تستعمل العينة معرفاً نصياً كي لا تخفي نسخة سطحية لهوية أغنى تحتوي بدورها كائناً متغيراً، ويجب أن يراجع التصميم الحقيقي مراجع ذلك الكائن أيضاً.
function owner(id){return {principal:{id},drafts:new Map()};}
const a=owner("p1"),b=owner("p2");
a.drafts.set("c1","Draft A");
console.assert(a!==b && a.principal!==b.principal);
console.assert(a.drafts!==b.drafts && !b.drafts.has("c1"));
لا يتشارك المالكان الغلاف أوالخريطة، ولم تنشأ طلبات خادم أو سياقات مكونات.
وافق تبدل الحساب والتنظيف وأعمار الخادم
تقاعد حالة الحساب السابق وارفض رده بعد الدخول والخروج. أبق السر بوحدة خادم وسياق حدث وراجع مفتاح المشترك. اختبر التتابع والتداخل وإعادة المكون والاستبدال والتنظيف بدمج مأذون. يشغل المقرر التخصيص فقط دون سياق أواشتراك أوSSR أوخروج أوتنقل، فلا تسم نجاح Map عزلاً منشوراً تحت التزامن. يجب أن يؤكد الدمج أي مالك فعلي أنشأ الحالة ووقت تحرر المورد، لا أن يكتفي بملاحظة أن مثيلين أنشآ يدوياً في اختبار نقي يبدوان مختلفين.
الأخطاء الشائعة وإصلاحها
يسرب مخزن وحدة خادم حالة مستخدم آخر
- لماذا يحدث؟
- عاشت بيانات طلب متغيرة داخل مثيل وحدة مشترك.
- كيف تصلحه؟
- أنشئ الحالة الخاصة تحت مالك طلبها أوشجرتها.
- كيف تتجنب تكراره؟
- اختبر الهويات المتداخلة والمتتابعة.
يحتفظ مستهلك سياق بمرجع فهرس قديم
- لماذا يحدث؟
- اختلط التقاط البداية بقراءة تفاعلية حالية.
- كيف تصلحه؟
- قدم getter مقصودة أوعقد مالك تفاعلي مستقر.
- كيف تتجنب تكراره؟
- اختبر الاستبدال وإعادة التخطيط دون تحميل كامل.
يشارك غلاف جديد حالة داخلية قابلة للتحرير
- لماذا يحدث؟
- تغيرت الهوية الخارجية فقط وبقيت المراجع الداخلية المتغيرة مشتركة.
- كيف تصلحه؟
- حدد الملكية المتداخلة وخصص القيم أوثبتها بقصد.
- كيف تتجنب تكراره؟
- أكد عزل التغيير المتداخل لا اختلاف الغلافين فقط.
اختبر فهمك
1. لماذا لا يكفي كائن خارجي جديد لعزل الطلب؟
اعرض الحل المشروح
قد يشير لهوية أومخبأ أومجموعة مسودات مشتركة. لا تنسخ اللفة السطحية الاعتماد عميقاً. افصل الثابت المشترك عن المتغير لعملية واحدة واختبر داخله، ثم تحقق من تخصيص SSR والسياق الفعلي لا المصنع المحلي فقط.
2. هل أصبحت المخازن قديمة لمجرد وجود runes في Svelte 5؟
اعرض الحل المشروح
لا. تغطي runes حالات كثيرة وتبقى المخازن مفيدة لاشتراكها وتكاملها. اختر بالملكية والعمر والمستهلك لا استبدال عام، وقد يخطئ كلا النهجين بمشاركة حالة خادم خاصة بين الطلبات.
أهم ما تعلمته
- تحتاج مشاركة الحالة مالكاً وعمراً مسميين.
- لا يعزل السياق والمخزن الحالة الخاصة المتداخلة تلقائياً.