不确定标题是否完全清楚(不确定如何表达)所以让我解释一下。
我想尝试在数组中存储组件名称列表,然后使用map
(或合适的等价物)循环,以便将每个数组值显示为JSX组件。
这就是这样的事情(欣赏这段代码不起作用,只是试图展示我希望实现的目标):
render(){
let links = ['DashboardLink', 'CoursesLink', 'AssignmentsLink'];
return (
<div>{
links.map((Link) => {
return <Link key={Link} />
}
}</div>
)
}
理想情况下,结果将是:
<div>
<DashboardLink key='DashboardLink' />
<CoursesLink key='CoursesLink' />
<AssignmentLink key='AssignmentLink' />
</div>
然后每个组件将在div中呈现。
我对React和ES6很陌生,因此对任何明显的错误表示歉意。
谢谢!
答案 0 :(得分:2)
您可以使用辅助函数:
render(){
var links = ['DashboardLink', 'CoursesLink', 'AssignmentsLink'];
var findComponent: function (name){
switch (name){
case 'DashboardLink':
return (<DashboardLink />);
case 'CoursesLink':
return (<CoursesLink />);
case 'AssignmentsLink':
return (<AssignmentsLink />);
default:
return null; //You might want to return something else here//
}
};
return (
<div>
links.map((Link) => {
return findComponent(Link);
}
</div>
);
}
您也可以将此功能放在其他地方......
使用React.createElement方法创建自定义组件: 第一个参数是标签名称,第二个参数是具有属性的对象,您可以将子项添加为第三个参数。
render(){
var links = ['DashboardLink', 'CoursesLink', 'AssignmentsLink'];
return (
<div>
links.map((Link) => {
return React.createElement(Link, {key: Link});
}
</div>
);
}
答案 1 :(得分:1)
为什么不做这样的事情?
import CoursesLink from 'components/CoursesLink';
import DashboardLink from 'components/DashboardLink';
import AssignmentsLink from 'components/AssignmentLink';
getComponentByName(name) {
switch(name):
case 'DashboardLink':
return DashboardLink
case 'AssignmentsLink':
return AssignmentsLink;
case 'CoursesLink':
return CoursesLink;
default:
return <div />
}
render() {
const links = ['DashboardLink', 'AssignmentLink', 'CoursesLink'];
return (
<div>
{links.map(link => React.createElement(getComponentByName(link), key={link}))}
</div>
)
}
答案 2 :(得分:1)
或者,使links
成为一个函数数组并使用其他键(或函数名称):
render(){
let links = [DashboardLink, CoursesLink, AssignmentsLink];
return (
<div>{
links.map((Link, index) => {
return <Link key={index} />
// or
// return React.createElement(Link, {key: index});
}
}</div>
)
}
您的原始代码无效,因为React希望Link
解析为函数,而不是字符串。