في هذه المقالة، سننظر في كيفية التخلص من React.Context في تطبيقاتك وإيجاد دافع للقيام بذلك.
ربما تكون على دراية بـ React وربما تكون لديك بالفعل خبرة في استخدام React.Context إذا وصلت إلى هذه المقالة، ولكن إذا لم تكن كذلك، فلا تتردد في قراءتها على أي حال ومشاركتها مع الأشخاص الذين قد يكونون مهتمين.
يؤدي السياق إلى تدهور إمكانية القراءة والتشابك وتقييد التطبيق.
ألق نظرة على هذا المثال الأساسي:
لا يبدو الأمر مفهومًا وموثوقًا للغاية، أليس كذلك؟
إليك بعض المشكلات المحتملة عند استخدام السياقات:
حقيقة ممتعة: "جحيم الوعد" المشهور يبدو متشابهًا ?♂️
loadClients() .then((client) => { return populate(client) .then((clientPopulated) => { return commit(clientPopulated); }); });
إنشاء خطافات بدلاً من ذلك.
دعونا نستبدل ThemeContext من المثال أعلاه بخطاف useTheme مخصص:
import { useAppEvents } from 'use-app-events'; const useTheme = () => { const [theme, setTheme] = useState('dark'); /** Set up communication between the instances of the hook. */ const { notifyEventListeners, listenForEvents } = useAppEvents(); listenForEvents('theme-update', (themeNext: string) => { setTheme(themeNext); }); const updateTheme = (themeNext: string) => { setTheme(themeNext); notifyEventListeners('theme-update', themeNext); }; return { theme, updateTheme, }; };
استخدمنا حزمة npm تسمى أحداث use-app للسماح لجميع مثيلات خطاف useTheme بالاتصال لمزامنة حالة السمة الخاصة بها. فهو يضمن أن قيمة السمة ستكون هي نفسها عند استدعاء useTheme عدة مرات حول التطبيق.
علاوة على ذلك، وبفضل حزمة أحداث التطبيق، ستتم مزامنة السمة حتى بين علامات تبويب المتصفح.
في هذه المرحلة، لم تعد هناك حاجة إلى ThemeContext حيث يمكن استخدام خطاف useTheme في أي مكان في التطبيق للحصول على السمة الحالية وتحديثها:
const App = () => { const { theme, updateTheme } = useTheme(); updateTheme('light'); // Output:Current theme: lightreturnCurrent theme: {theme}; }
ما هي إيجابيات هذا النهج:
كانت React.Context أداة قوية منذ بعض الوقت بالتأكيد، ولكن الخطافات توفر طريقة أكثر تحكمًا وموثوقية لإدارة الحالة العامة لتطبيقك إذا تم تنفيذها بشكل صحيح بالتزامن مع حزمة أحداث use-app.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3