Li Ming

React Native 0.42 开启 Debug JS Remotely 后,Modal 设置为 visible={true} 的界面不执行

今天在 React Native 遇到一个问题,render 中增加了一个 Modal 控件,只要 visible 是 true,iOS 模拟器就停在该界面的上一个界面,并不会执行 Navigator 的 push。将 visible 改为 false,立刻就能显示了。

多方搜索之后,发现是 RN 0.42 的一个 BUG,出现的情况汇总:

  • Android + no remote debugging = OK
  • Android + remote debugging = OK
  • iOS + no remote debugging = OK
  • iOS + remote debugging = HANGS

问题仅仅出现在 iOS 开启远程调试的模式下。

解决的办法:

  • 找到 node_modules/react-native/Libraries/ReactNative/YellowBox.js
  • 增加一行代码:
const elevation = Platform.OS === 'android' ? Number.MAX_SAFE_INTEGER : undefined;
  • 将所有的 3 处 elevation: Number.MAX_VALUE 都替换成 elevation: elevation

参考资料:

https://github.com/facebook/react-native/issues/12223 https://github.com/facebook/react-native/issues/12777