上下文:我正在开发一个基于窗口小部件的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' };
当我的名称在字符串var中时,如何渲染React组件?
我基于动态渲染React组件进行了尝试:
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/
您可以将一个对象用作组件类型的查找,并将呈现它的详细信息放在一个位置:
var components = { 'HiWidget': HiWidget, 'HelloWidget': HelloWidget } var Component = components[dataFromObj.type] React.render( <Component name={dataFromObj.name}/>, document.getElementById('try3') )