【发布时间】:2015-05-25 13:19:08
【问题描述】:
背景:我正在开发一个基于小部件的 web 应用程序(例如已停产的 iGoogle,用户可以在其中选择他们想要显示的小部件)。每个小部件都是一个 React 组件。
简化示例: 这里有 2 个不同的小部件
var HelloWidget = React.createClass({
render: function() { return <div>Hello {this.props.name}</div>; }
});
var HiWidget = React.createClass({
render: function() { return <div>Hi {this.props.name}</div>; }
});
作为用户,我选择了 HiWidget,我的名字是“dude”,所以当系统从持久层获取我的偏好时,它看起来像这样:
var dataFromDb = {
type: 'HiWidget',
name: 'dude'
};
如果 React 组件的名称包含在字符串 var 中,如何渲染它?
我试过这个,基于Dynamically Rendering a React component:
React.render(
<dataFromDb.type name={dataFromDb.name} />,
document.getElementById('try2')
);
它曾经与 React 0.11 一起工作,但现在不行了。
而且我想避免使用巨大的 switch 语句:
switch (dataFromDb.type) {
case 'HiWidget':
var component = <HiWidget name={dataFromDb.name} />;
break;
case 'HelloWidget':
var component = <HelloWidget name={dataFromDb.name} />;
break;
}
React.render(
component,
document.getElementById('try3')
);
JSFiddle 在这里使用所有这些代码:http://jsfiddle.net/61xdfjk5/
【问题讨论】:
标签: javascript reactjs react-jsx