RN 增加打开错误模块容错处理

2020-11-07  本文已影响0人  莫帆海氵

问题描述

终端用户还没更新最新的 RN 资源包,打开不存在的 RN 模块会怎样?

最初的想法是进入 RN 后,在 RN 内部处理,如果遇到的是不存在的模块直接跳转到一个默认的 404 模块

有下面三种方案可以考虑

  1. 调整模块成一个通用模块,以后增加的页面都维护在这里,通过 navigation 路由形式维护
  2. 增加一个通用模块,但在这个模块里使用 runApplication || runnable 根据传入参数再打开目标模块
  3. 能捕获到错误,显示默认的模块信息

经过一番研究讨论下来,方案一需要改动每个模块都增加路由不适合我们的场景,方案三 RN 内部没找到能捕获到错误的地方,所以选择了方案二。

const AppCenter = (props) => {
    let runnalbe = AppRegistry.getRunnable(props.module)
    if (!runnalbe) {
      runnalbe = AppRegistry.getRunnable('not_found')
    }
  
    runnalbe(props)
  
    return null
}
  
export default AppCenter

一开始想到用这种方式执行对应 RN 模块方法,本地测试通过后遇到在 android 使用这种方式很容易崩溃

再之后想到既然不能执行,直接使用对应模块的组件就好了,试验一番下来使用这种方式可以满足要求

function getApp(module) {
    let app = module_map[module]
    if (!app) app = not_found
    return app
}

const AppCenter = (props) => {
  const { module } = props
  let App = getApp(module)

  return [
    <App {...props} key="app" />,
  ]
}
上一篇 下一篇

猜你喜欢

热点阅读