اذهب إلى المحتوى
  • 0

كيفية تشغيل redux devtools في next js

مروان محمود3

السؤال

Recommended Posts

  • 1

سبب هذا الخطأ هو أن مجموعة أدوات تطوير ريدكس(redux dev-tools) تعمل على المتصفح بينما الnext js تعمل على الخادم مما يسبب مشاكل, فعندما نقوم بإستخدام React. js كنا نقوم بكتابة شفرة برمجية كتلك 

const store = createStore(reducer
  , window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__())

ولكن عند كتابة تلك الشفرة في Next.js سيتسبب ذلك بمشكلة لأن كما أخبرتك أن الnext js تعمل على الخادم أولاً حتى تحقق ال static-site-generating أو ال server-side rendering و الكائن window هو أحد الكائنات الخاصة بالمتصفح وبما أن الشفرة البرمجية تعمل عند الخادم أولاً فبالتالي لن يمكنها الوصول إلى الكائنات الخاصة بالمتصفح.

الحل: أن نقوم بالتأكد أولاً من كون الشفرة البرمجية يتم تنفيذها على المتصفح وليس على الخادم حتى ﻻ تتسبب بأخطاء, ويمكننا التحقق من ذلك عن طريق التحقق من توفر الكائن window , ويمكن كتابة الشفرة البرمجية على النحو التالي:

const enhancer =  (typeof window !== 'undefined' && window.devToolsExtension) ?  window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() : f => f

const store = createStore(reducer
    ,enhancer);

هكذا نقوم بالتأكد أولاً أن الشفرة البرمجية تعمل بالمتصفح وأن مجموعة الأدوات تعمل بنجاح

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

تأكد من تعزيز ال Middlewares في مشروعك بمحسن الاضافة ليتم الربط مع الإضافة، كالتالي 

import { createStore, applyMiddleware, compose } from 'redux';

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;

const store = createStore(reducer, preloadedState, composeEnhancers(
	applyMiddleware(...middleware /* مرر كل الـ middlewares التي تستخدمها هنا */)
));

من فضلك أرفق الخطأ الذي يظهر لك إن لم تنجح بتنفيذ الربط

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 دقائق مضت قال Hassan Hedr:

تأكد من تعزيز ال Middlewares في مشروعك بمحسن الاضافة ليتم الربط مع الإضافة، كالتالي 


import { createStore, applyMiddleware, compose } from 'redux';

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;

const store = createStore(reducer, preloadedState, composeEnhancers(
	applyMiddleware(...middleware /* مرر كل الـ middlewares التي تستخدمها هنا */)
));

من فضلك أرفق الخطأ الذي يظهر لك إن لم تنجح بتنفيذ الربط

ﻻ اقوم باستخدام middlewares هل اقوم بتمرير مصفوفة فارغة ام ماذا افعل تحديدا

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 دقائق مضت قال مروان محمود3:

ﻻ اقوم باستخدام middlewares هل اقوم بتمرير مصفوفة فارغة ام ماذا افعل تحديدا

يمكنك تمرير المعزز كالتالي، ويمكنك أيضا الاستغناء عن تمرير preloadedState اذا كنت لا تستخدم حالة ابتدائية

import { createStore } from 'redux';

...

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__();

const store = createStore(reducer, preloadedState, composeEnhancers));

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...