美文网首页
RN 增加打开错误模块容错处理

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

作者: 莫帆海氵 | 来源:发表于2020-11-07 18:23 被阅读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" />,
      ]
    }
    

    相关文章

      网友评论

          本文标题:RN 增加打开错误模块容错处理

          本文链接:https://www.haomeiwen.com/subject/zjrqbktx.html