javascript - React router 组件名如何通过遍历得到?
巴扎黑
巴扎黑 2017-04-10 16:48:42
[JavaScript讨论组]

想法是这样的,通过定义一个对象/数组来存导航部分的数据。

data = [
    {title: "home", url: "home"},
    {title: "about", url: "about"},
    {title: "blog", url: "blog"},
]

列表的组件写的是没有问题的,下面是Router部分,简写了,获取URL是没有问题的。

data.map(function (item, index, arr) {
    // 组件名首字母大写
    var com_name = item.url.charAt(0).toUpperCase() + item.url.substr(1);
    return (
        <Route path={item.url} component={!!!!此处有问题!!!!!}></Route>
    )
})

对于问题部分的代码:

// 想要的情况
<Route component={Home}></Route>

// 如果这么写
<Route component={com_name}></Route>
// 相当于
<Route component={"Home"}></Route>
// 这种情况不匹配

// 如果这么写
<Route component={eval(com_name)}></Route>
// DEBUG显示未定义

想说的是,究竟应该怎么写?

巴扎黑
巴扎黑

全部回复(2)
天蓬老师

试一下这样<Route component={require("Home的路径")}></Route>

伊谢尔伦

React Router有不用jsx的写法

可以这样写

data.map(function (item, index, arr) {
    // 组件名首字母大写
    var com_name = item.url.charAt(0).toUpperCase() + item.url.substr(1);
    return (
        React.createElement(DefaultRoute, {name: "index", path: item.url, component: com_name})
    )
})

也可以使用React工厂函数

var Route = React.createFactory(Router.Route);
data.map(function (item, index, arr) {
    // 组件名首字母大写
    var com_name = item.url.charAt(0).toUpperCase() + item.url.substr(1);
    return (
        Route({
            name: "index",
            path: item.url,
            component: com_name
        });
    )
})

再简单一点,直接将路由数据按规定的格式定义好,丢给Router就ok

const data = [
    {
        path: '/',
        component: Home,
        childRoutes:[
            {path: "home", component: Home},
            {path: "about", component: About},
            {path: "blog", component: Blog},
        ]
    }
];
render(<Router routes={data} />, document.body)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号