React / سلوك تطبيق منسق / الدرس 8
المراجع والحدود الأمرية
استخدم المراجع لما لا يقود العرض ولعمليات DOM ضيقة بملكية عمر واضحة.
في هذه الصفحة
أهداف الدرس
- المرجع تخزين مستمر دون عرض
- التركيز بفعل مقصود
- سطح أمري عام ضيق
المرجع تخزين مستمر دون عرض
تعيد useRef كائنا مستقرا يحتفظ current عبر العروض دون طلب عرض عند تغييره. لذلك يستخدم العداد المرئي الحالة. تناسب المراجع المقابض والعقد والقيم غير المحددة للواجهة. تجنب قراءتها وكتابتها أثناء العرض خارج التهيئة المتوقعة الموثقة. ليست حيلة لتجاوز الاعتماديات؛ مثل المؤثر بالواجهة حالة أو تكامل مخزن مناسب.
حفظ ملكية DOM لدى React
يكشف المرجع العقدة الملتزم بها للتركيز والتمرير وواجهات المتصفح، وقد يكون null قبل التركيب وبعد الفك. لا تعد كتابة أبناء تديرهم React فيختلف النموذج عن DOM. صف المحتوى والأصناف بالحالة. يختلف focus ضيق عن بناء واجهة موازية. حدد حاوية الودجت الخارجية وملكية أبنائها وتحديثها وتنظيفها.
التركيز بفعل مقصود
يركز المثال حقلا مسمى من زر ويتحقق من العقدة دون تغيير القيمة أو إخفاء المؤشر. يجب أن يدعم النقل المهمة لا كل عرض أو حالة غير مرتبطة. اختبر المفاتيح والمؤشر ولا ترسل التركيز للمخفي. وثق البداية والإغلاق والإعادة للحوار أو الملخص بدلا من نثر focus بالمكونات.
import { useRef } from "react";
export default function App() { const input = useRef(null); return <main><h1>Focus helper</h1><label htmlFor="search">Search</label><input id="search" ref={input} /><button type="button" onClick={() => input.current?.focus()}>Focus search</button></main>; }
Clicking Focus search makes the Search input active.
ينفذ الحدث عملية ضيقة على الحقل الملتزم به مع حفظ دلالاته.
حفظ مقبض العملية لا حالة عرضها
يحفظ المثال مقبض المؤقت بمرجع والحالة المرئية بحالة. يمسح السابق عند البدء ويغلقه عند الفك. المقبض لا يعرض لكن Waiting وDone تعرضان. يمنع الفصل تحديثا لمورد تنفيذي فقط. لا يضمن المؤقت زمنا دقيقا؛ فقد يؤخره المتصفح، فاختبر شرط الاكتمال لا ميلي ثانية ثابتة.
import { useEffect, useRef, useState } from "react";
export default function App() { const timer = useRef(null); const [status, setStatus] = useState("Idle"); useEffect(() => () => clearTimeout(timer.current), []); function start() { clearTimeout(timer.current); setStatus("Waiting"); timer.current = setTimeout(() => setStatus("Done"), 20); } return <main><h1>Owned timer</h1><p>{status}</p><button type="button" onClick={start}>Start</button></main>; }
Initial: Idle. After Start: Waiting, then Done while mounted.
يحفظ المرجع المقبض والحالة النتيجة، ويستبدل البدء المؤقت بدلا من تراكمه.
سطح أمري عام ضيق
قد يحتاج الأب focus لكن كشف الشجرة كلها يربطه بالتنفيذ. فضل props والتبليغ، واكشف أضيق عمليات عند الضرورة. تختلف الواجهات: تدعم React 19 ref خاصية للدوال وتستخدم الأقدم forwardRef. تستخدم أمثلتنا مراجع محلية مشتركة ولا تمزج الإصدارات. ولا يثبت تغير المرجع التزام عرض دون تنسيق العمر.
الأخطاء الشائعة وإصلاحها
لا يغير current التسمية
- لماذا يحدث؟
- لا يطلب المرجع عرضا.
- كيف تصلحه؟
- استخدم الحالة للمرئي.
- كيف تتجنب تكراره؟
- افصل المقبض والبيانات.
يفشل DOM قبل التركيب
- لماذا يحدث؟
- العقدة null.
- كيف تصلحه؟
- استدع بحد عمر صالح وافحص الغياب.
- كيف تتجنب تكراره؟
- اختبر التركيب والفك.
تختفي تعديلات DOM أو تتعارض
- لماذا يحدث؟
- غيرت أبناء تملكهم React.
- كيف تصلحه؟
- صف المحتوى بالحالة والمدخلات.
- كيف تتجنب تكراره؟
- وثق ملكية الودجت.
اختبر فهمك
1. اختر حالة أو مرجعا للتبويب المحدد ومقبض مؤقت.
اعرض الحل المشروح
استخدم الحالة للتبويب لأنه يحدد المحتوى وحالته، والمرجع للمقبض الواجب مسحه دون عرض. احفظ الانتظار مرئيا بحالة عند الحاجة.
2. لماذا تحدد ملكية حاوية ودجت خارجية؟
اعرض الحل المشروح
قد يعدل النظامان الأبناء نفسيهما فيتقادم النموذج. امنح حدًا واضحا وزامن المدخلات ونظف، وأبق محتوى React خارج التعديل غير المنضبط.
أهم ما تعلمته
- تستمر المراجع دون عرض.
- يحتاج DOM الأمري عقدا ضيقا.
- يبقى التنظيف ضروريا.