问题描述
终端用户还没更新最新的 RN 资源包,打开不存在的 RN 模块会怎样?
最初的想法是进入 RN 后,在 RN 内部处理,如果遇到的是不存在的模块直接跳转到一个默认的 404 模块
有下面三种方案可以考虑
- 调整模块成一个通用模块,以后增加的页面都维护在这里,通过 navigation 路由形式维护
- 增加一个通用模块,但在这个模块里使用 runApplication || runnable 根据传入参数再打开目标模块
- 能捕获到错误,显示默认的模块信息
经过一番研究讨论下来,方案一需要改动每个模块都增加路由不适合我们的场景,方案三 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" />,
]
}
网友评论