React-native-router-flux: استثناء فادح: com.facebook.react.common.JavascriptException: TypeError: undefined ليس كائنًا (تقييم 'r.default')

تم إنشاؤها على ١٢ يوليو ٢٠١٨  ·  32تعليقات  ·  مصدر: aksonov/react-native-router-flux

إصدار

أخبرنا بالإصدارات التي تستخدمها:

  • "رد فعل جهاز التوجيه الأصلي تدفق": "^ 4.0.0-beta.31"
  • "تفاعل أصلي": "0.56.0"

-- مشكلة
عندما أقوم بإضافة درج للحصول على استثناء وتعطل التطبيق عند الإصدار apk ، عندما أقوم بتشغيل التطبيق في التصحيح ، سيتم تجميعه وتشغيله بشكل جيد.

رمز درجتي

 <Drawer
                    hideNavBar
                    key="drawerMain"
                    contentComponent={SideBar}
                    drawerImage={MenuIcon}
                    drawerWidth={300}
                    type="reset">



                    <Stack
                        initial
                        key="HomeWithMap"
                        title="home"
                        tabBarLabel="Profile"
                        inactiveBackgroundColor="#FFF"
                        activeBackgroundColor="#004E9E"
                        icon={TabIcon}
                        navigationBarStyle={{ backgroundColor: '#004E9E' }}
                        titleStyle={{ color: 'white', alignSelf: 'center' }}>
                        <Scene
                            key="HomeScreenMap"
                            initial={false}
                            navBar={CustomNavBar}
                            component={HomeScreenWithMap}
                            type="reset"
                        ></Scene>

                    </Stack>

                    <Stack
                        key="HomeWithList"
                        title="home"
                        tabBarLabel="Profile"
                        inactiveBackgroundColor="#FFF"
                        activeBackgroundColor="#004E9E"
                        icon={TabIcon}
                        navigationBarStyle={{ backgroundColor: '#004E9E' }}
                        titleStyle={{ color: 'white', alignSelf: 'center' }}>

                        <Scene
                            key="HomeScreenList"
                            navBar={CustomNavBar}
                            component={HomeScreenWithList}
                            type="reset"
                        ></Scene>


                    </Stack>


                </Drawer>

--استثناء

استثناء فادح: com.facebook.react.common.JavascriptException: TypeError: undefined ليس كائنًا (تقييم 'r.default')

هذا الخطأ موجود في:
في غير معروف
في تي
في RCTView
في RCTView
في t ، مكدس:
ب @ 380 : 1598
ProcessScene @ 310 : 16513
oe @ 310 : 14574
ProcessScene @ 310 : 15557
إنشاء @ 310 : 11694
ب @ 401 : 4077
tr @ 106 : 42936
Nr @ 106 : 56528
أور @ 106 : 56960
ui @ 106 : 61804
oi @ 106 : 61224
ri @ 106 : 60352
Ir @ 106 : 59332
دي @ 106 : 66528
مرحبًا @ 106 : 66840
عرض @ 106 : 69158
الصادرات @ 283 : 440
تشغيل @ 279 : 601
runApplication @ 279 : 2051
القيمة @ 18 : 3329
@ 18 : 912
القيمة @ 18 : 2598
القيمة @ 18 : 884

   at com.facebook.react.modules.core.ExceptionsManagerModule.showOrThrowError(ExceptionsManagerModule.java:54)
   at com.facebook.react.modules.core.ExceptionsManagerModule.reportFatalException(ExceptionsManagerModule.java:38)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
   at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:160)
   at com.facebook.react.bridge.queue.NativeRunnable.run(NativeRunnable.java)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29)
   at android.os.Looper.loop(Looper.java:148)
   at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:192)
   at java.lang.Thread.run(Thread.java:818)

التعليق الأكثر فائدة

قم بتشغيل مقتطف package.json في التثبيت اللاحق أو يدويًا قبل الإصدار:

للتنقل التفاعلي الأقدم (حيث لا يتوفر SwitchRouter)

{
  "scripts": {
    "fix:react-navigation": "sed -i '' 's/ TabRouter/ tabRouter/g' ./node_modules/react-navigation/src/navigators/DrawerNavigator.js && sed -i '' 's/ StackRouter/ stackRouter/g' ./node_modules/react-navigation/src/navigators/StackNavigator.js && sed -i '' 's/ TabRouter/ tabRouter/g' ./node_modules/react-navigation/src/navigators/TabNavigator.js"
  }
}

للملاحة التفاعلية الأحدث (حيث يتوفر SwitchRouter)

{
  "scripts": {
    "fix:react-navigation": "sed -i '' 's/ TabRouter/ tabRouter/g' ./node_modules/react-navigation/src/navigators/DrawerNavigator.js && sed -i '' 's/ StackRouter/ stackRouter/g' ./node_modules/react-navigation/src/navigators/StackNavigator.js && sed -i '' 's/ TabRouter/ tabRouter/g' ./node_modules/react-navigation/src/navigators/TabNavigator.js && sed -i '' 's/ SwitchRouter/ switchRouter/g' ./node_modules/react-navigation/src/navigators/SwitchNavigator.js"
  }
}

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

ال 32 كومينتر

لذا فإن سبب الخطأ مجرد غباء.
في node_modules / reaction-navigation / src / navigators / DrawerNavigator.js ، يوجد TabRouter مستورد ، والذي يبدو وكأنه مكون (يبدأ بأحرف كبيرة) ، ولكنه في الواقع مجرد وظيفة ، لذلك عندما يصل الرمز إلى const contentRouter = TabRouter(routeConfigs, tabsConfig); يتم إلقائه هذا الخطأ لأنه لا يحلها كوظيفة؟ حتى أنها لا تشغلها.
هذه بعض عناصر تكوين babel الجديدة أو شيء ما ، وهو مجرد مساحة غريبة من js بالنسبة لي ...

لذا تتمثل إحدى طرق إصلاح ذلك في إعادة تسمية كل TabRouter في هذا الملف إلى tabRouter . أنا أكره تعديل ملفات node_modules ، أراهن أنه يجب أن تكون هناك طريقة لأقول للمترجم (أو أيا كان) أن TabRouter كوظيفة على ما يرام؟

MustafaHosny اللهم امين ......

الكثير من الشكر. أي إصلاح مناسب في مكان ما لهذه المشكلة؟ أعني عدم تعديل node_modules يدويًا؟

CptFabulouso هل يمكنك من فضلك توضيح كيف وجدت أصل المشكلة؟ بعد إعادة تسمية TabRouter إلى tabRouter ما زلت أتلقى مشكلة r.default ...

import tabRouter from '../routers/TabRouter';
const contentRouter = tabRouter(routeConfigs, tabsConfig);

كما حاولت أن تفعل ذلك في كل ملاحين آخرين ولكن دون جدوى ...

إذا أوضحت كيف عثرت على المشكلة ، فقد أتمكن من العثور على الخطأ الذي لا يزال.

لا يزال الحصول على: ReactNativeJS: undefined is not an object (evaluating 'r.default')

لقد استخدمت سجلات وحدة التحكم (شاهدتها في android studio) لتتبع مكان حدوث خطأ في الرمز. هل قمت أيضًا بإصلاح السطر التالي بعد contentRouter؟

const contentRouter = tabRouter(routeConfigs, tabsConfig);
const drawerRouter = tabRouter(

حسنًا ، لقد نجحت الآن ، فقط تفعل ما اقترحته تعديل هذه الأسطر الثلاثة في node_modules/react-navigation/src/navigators/DrawerNavigator.js :

  import tabRouter from '../routers/TabRouter';
  const contentRouter = tabRouter(routeConfigs, tabsConfig);
  const drawerRouter = tabRouter(

سيكون من الرائع العثور على سبب المسار وإصلاحه لأن الحل النظيف الوحيد (ليس كذلك) الذي وجدته هو:

  • تفرع رد الفعل والملاحة
  • إجراء تعديلات في DrawerNavigator رد فعل التنقل في 1.x الفرع
  • أضف هذا إلى مجموعتي. json:
  "resolutions": {
    "react-native-router-flux/**/react-navigation": "https://github.com/ebaynaud/react-navigation.git#1.x"
  },

كان قد أرسل أيضًا PR على رد الفعل والملاحة: https://github.com/react-navigation/react-navigation/pull/4699

ebaynaud ما هو إصدار رد الفعل والملاحة الذي تستخدمه؟

في البداية كان هذا هو المحدد في تبعيات RNRF الحالية ، لذلك 1.5.8.
الآن قمت بتقسيم آخر واحد في رد فعل التنقل 1.x فرع (الإصدار الأخير هو 1.5.11) وقمت بإجراء التعديلات في مفترقتي: https://github.com/ebaynaud/react-navigation.git#1.x

حل ebaynaud يعمل معي ، سينتظر تقديم العلاقات العامة

هل يمكن أن يكون هذا متعلقًا بهذا ؟

لسوء الحظ ، تم رفض ملفي الشخصي https://github.com/react-navigation/react-navigation/pull/4699 بسبب نقص المعلومات المقدمة. هل يمكن لأحد أن يشرح هذا؟

ebaynaud شكرا على الإصلاح ، لقد

هذا بسبب إزالة برنامج babel الإضافي الذي يسمح بإنشاء مثيل بدون كلمة رئيسية "جديدة" من babel 7 https://babeljs.io/docs/en/babel-plugin-transform-class-constructor-call

أنا أضرب هذا أيضًا :( كان هذا محيرًا بجنون في التصحيح

قد يكون هذا حلاً أكثر ملاءمة لهذه المشكلة. لقد رأيت أنه يعمل في مشروع ، ولم أجربه في أحد المشاريع الخاصة بي حتى الآن.

لقد فعلت ذلك بالفعل - يعمل في وضع التصحيح ، ولا يزال يتعطل في الإصدار

قم بتشغيل مقتطف package.json في التثبيت اللاحق أو يدويًا قبل الإصدار:

للتنقل التفاعلي الأقدم (حيث لا يتوفر SwitchRouter)

{
  "scripts": {
    "fix:react-navigation": "sed -i '' 's/ TabRouter/ tabRouter/g' ./node_modules/react-navigation/src/navigators/DrawerNavigator.js && sed -i '' 's/ StackRouter/ stackRouter/g' ./node_modules/react-navigation/src/navigators/StackNavigator.js && sed -i '' 's/ TabRouter/ tabRouter/g' ./node_modules/react-navigation/src/navigators/TabNavigator.js"
  }
}

للملاحة التفاعلية الأحدث (حيث يتوفر SwitchRouter)

{
  "scripts": {
    "fix:react-navigation": "sed -i '' 's/ TabRouter/ tabRouter/g' ./node_modules/react-navigation/src/navigators/DrawerNavigator.js && sed -i '' 's/ StackRouter/ stackRouter/g' ./node_modules/react-navigation/src/navigators/StackNavigator.js && sed -i '' 's/ TabRouter/ tabRouter/g' ./node_modules/react-navigation/src/navigators/TabNavigator.js && sed -i '' 's/ SwitchRouter/ switchRouter/g' ./node_modules/react-navigation/src/navigators/SwitchNavigator.js"
  }
}

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

pavjacko مع تطبيق هذه الإصلاحات ، لا يزال يتعذر تشغيله في وضع الإصدار (وضع التصحيح على ما يرام)
2018-08-07 15:24:35.636 [error][tid:com.facebook.react.JavaScript] TypeError: undefined is not an object (evaluating 't.default')

أقوم بتنفيذ هذا الأمر من جذر المشروع لإصلاحه:

sed -i -e 's/TabRouter/tabRouter/g' node_modules/react-navigation/src/navigators/DrawerNavigator.js
sed -i -e 's/\/routers\/tabRouter/\/routers\/TabRouter/g' node_modules/react-navigation/src/navigators/DrawerNavigator.js

أواجه نفس المشكلة ، لقد جربت كل ما هو مذكور أعلاه ، ولم ينجح شيء بالنسبة لي.
وضع التصحيح يعمل بشكل جيد. تحدث المشكلة في وضع التحرير.

إصدار RN: 0.56.0

نفس،

ليس لدي ملف DrawerNavigator.js.

لقد جربت كل الحلول ولكن لم يحالفني الحظ

أنا آسف ولكن لدي مشكلة

عملت من أجلي. :)

أي من الحلول يناسبك أو ماذا فعلت

Anujmoglix ما هو إصدار RN الذي تستخدمه؟

0.56

شكرًا يا رفاق ، لقد نجحت إعادة تسمية TabRouter إلى tabRouter في ملف "node_modules / رد فعل التنقل / src / navigators / DrawerNavigator.js" بالنسبة لي.

شكرا هذا يعمل.

شكرًا يا رفاق ، لقد نجحت إعادة تسمية TabRouter إلى tabRouter في ملف "node_modules / رد فعل التنقل / src / navigators / DrawerNavigator.js" بالنسبة لي.

شكرا جزيلا!!!!!!!!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات