React Native - `require()` 语句异常处理

Gil*_*tzi 6 javascript android ios momentjs react-native

TL;DR:我希望能够require插入模块react-native并自己处理异常,以防模块不存在(而不是显示RedBox)。


当给定请求的区域设置时,我使用moment.js的逻辑从其预设库(https://github.com/moment/moment/tree/develop/locale )中选择最合适的区域设置。

例如,如果请求en-us,但未找到,则会回落至 ,en依此类推。此逻辑的代码 ( chooseLocale, loadLocale) 可以在这里找到: https: //github.com/moment/moment/blob/develop/src/lib/locale/locales.js

基本上,它会尝试给require定的预设。如果它不存在,它将从require语句中获取异常,捕获它并继续执行下一个选项。

现在,我的问题是尝试将此逻辑与react-native. 该require语句实际上是用react-native's实现的guardedLoadModule,它处理异常(显示红屏)。在我看来,moment的逻辑并没有受到这种逻辑的伤害,因此我想RedBox不显示 。

有什么想法吗?

Tho*_*mas 1

React-nativerequire与 Node.js 的不同之处require在于,应用程序在应用程序运行之前进行捆绑和打包。因此,无法执行动态require语句。另请参阅此 github 问题

检查react-native 上的以下 github 问题,因为它包含您的问题的“解决方案”。https://github.com/facebook/react-native/issues/1629

换句话说:您必须自己实现后备机制,并明确告知要使用哪个区域设置。

switch deviceLocale:
case 'es':
  require('moment/locale/es');
  break;
case 'he':
  require('moment/locale/he');
  break;
Run Code Online (Sandbox Code Playgroud)