Контекст: я разрабатываю веб-приложение на основе виджетов (например, несуществующий 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, и меня зовут «чувак», поэтому, когда система получает мои предпочтения из уровня сохраняемости, это выглядит так:
var dataFromDb = {
type: 'HiWidget',
name: 'dude'
};
Как я могу отобразить компонент React, если у меня есть его имя в строке var?
Я попробовал это на основе динамического рендеринга компонента 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/