React Navigation源代码阅读 :routers/getScreenForRouteName.js

本文介绍了一个简单的工具函数,用于从路由配置中获取指定名称的路由所对应的屏幕组件。该组件可以是一个React组件或另一种类型的navigator。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值