import invariant from '../utils/invariant';
/**
* Simple helper that gets a single screen (React component or navigator)
* out of the navigator config.
*
* 工具函数,用于获取路由配置 routeConfigs 中某个名字为 routeName 的路由
* 配置项中所使用的屏幕组件,可能是某一个 React 组件,或者另外一个某种类型的
* navigator
*/
export default function getScreenForRouteName(routeConfigs, routeName) {
const routeConfig = routeConfigs[routeName];
if (!routeConfig) {
// 如果指定名字的路由找不到,直接抛出 Error
throw new Error(
`There is no route defined for key ${routeName}.\n` +
`Must be one of: ${Object.keys(routeConfigs)
.map(a => `'${a}'`)
.join(',')}`
);
}
if (routeConfig.screen) {
// 如果目标路由项 routeConfig 上存在属性 screen,则认为找到了目标 screen
return routeConfig.screen;
}
if (typeof routeConfig.getScreen === 'function') {
// 如果目标路由项 routeConfig 上不存在属性 screen,
// 但是存在函数 getScreen() 并且其返回类型为 function, 则也认为找到了目标 screen
const screen = routeConfig.getScreen();
invariant(
typeof screen === 'function',
`The getScreen defined for route '${routeName} didn't return a valid ` +
'screen or navigator.\n\n' +
'Please pass it like this:\n' +
`${routeName}: {\n getScreen: () => require('./MyScreen').default\n}`
);
return screen;
}
return routeConfig;
}
React Navigation源代码阅读 :routers/getScreenForRouteName.js
获取路由屏幕组件
最新推荐文章于 2021-07-28 19:05:29 发布
本文介绍了一个简单的工具函数,用于从路由配置中获取指定名称的路由所对应的屏幕组件。该组件可以是一个React组件或另一种类型的navigator。

3196

被折叠的 条评论
为什么被折叠?



