عبد النور محمد نشر 21 سبتمبر 2021 أرسل تقرير نشر 21 سبتمبر 2021 لدي مشكلة في الحصول على البيانات وتعيينها في localStorage فأنا أستخدم NextJs لذا لا يمكنني استخدام localStorage في البداية. أحاول حل المشكلة باستخدام useEffect لكن لدي حلقة لا نهائية لا أعرف أفضل طريقة لحل المشكلة ، باستخدام useCallback أو useMemo أو useRef. const [ meetings, setMeetings] = useState([]) // meetings= [{meeting1},{meeting2}] useEffect(() => { if(localStorage.getItem('meetings') === undefined || localStorage.getItem('meetings') === '' || localStorage.getItem('meetings') === null ){ localStorage.setItem('meetings', JSON.stringify([])) } if( JSON.parse(localStorage.getItem('meetings')).length === 0){ const meetingsInLocalStorage = JSON.parse(localStorage.getItem('meetings')) setMeetings([...meetings, meetingsInLocalStorage]) } },[meetings]) 2 اقتباس
0 Wael Aljamal نشر 21 سبتمبر 2021 أرسل تقرير نشر 21 سبتمبر 2021 في حالتك يمكنك قراءة القيم من local storage خارج useEffect وهذا أفضل حل const [ meetings, setMeetings] = useState([]) // meetings= [{meeting1},{meeting2}] const meetingsData = localStorage.getItem('meetings'); // نقلناها خارج useEffect const meetingsDataJSON = () => JSON.parse(localStorage.getItem('meetings')); // نقلناها خارج useEffect useEffect(() => { if(meetingsData === undefined || meetingsData === '' || meetingsData === null ){ localStorage.setItem('meetings', JSON.stringify([])) } if( meetingsDataJSON().length === 0){ const meetingsInLocalStorage = JSON.parse(localStorage.getItem('meetings')) setMeetings([...meetings, meetingsInLocalStorage]) } },[meetings]) يمكن إضافة مستمع أحداث للتغيرات التي تطرأ على meeting في local storage وتقوم على تحديثها تلقائياً useEffect(() => { function checkMeetingData() { const item = localStorage.getItem('meetingData') if (item) { setMeetingData(item) } } window.addEventListener('storage', checkMeetingData) return () => { window.removeEventListener('storage', checkMeetingData) } }, []) أو بهذه الطريقة: useEffect(() => { window.addEventListener("storage", () => { // تحديث عند حدوث تغييرات في التخزين refetch(); }); return () => { // عند عمل unmounts نحذف مستمع الأحداث window.removeEventListener("storage"); }; }, []); اقتباس
0 شرف الدين حفني نشر 21 سبتمبر 2021 أرسل تقرير نشر 21 سبتمبر 2021 سبب تلك الحلقة الﻻ نهائية أنك تقوم بإستخدام useEffect وتجعلها معتمدة على المتغير meetings وفي نفس الوقت تقوم بتغيير نفس المتغير في نفس دالة الuseEffect مما يعيد نداؤها مرة أخرى ويجعلها بالتالي تغير المتغير مرة أخرى إلى مالا نهاية, الحل أن تقوم بعمل دالتان للuseEffect الأولى تجعلها ﻻ تعتمد على متغيرات من الأساس, وتلك التي تقوم فيها بتغيير الmeetings الثانية المعتمدة على متغير الmeetings تقوم فيها بعمل باقي الشفرة البرمجية التي ﻻ تغير من هذا لمتغير اقتباس
السؤال
عبد النور محمد
لدي مشكلة في الحصول على البيانات وتعيينها في localStorage فأنا أستخدم NextJs لذا لا يمكنني استخدام localStorage في البداية.
أحاول حل المشكلة باستخدام useEffect لكن لدي حلقة لا نهائية لا أعرف أفضل طريقة لحل المشكلة ، باستخدام useCallback أو useMemo أو useRef.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.