Ключ немного не хватает, и я не знаю, если это документировано в любом месте, но вы должны использовать заглавную букву для компилятора JSX (?), Чтобы recoginise его как тип.
import AllComponents from 'Components';
const FooType = 'Foo';
return (
<div className="wrapper">
<div>Hello World</div>
<AllComponents[FooType] />
</div>
);
Edit - По комментариям
class Foo extends React.Component {
render() {
return <div>Foo 123</div>;
}
};
class Bar extends React.Component {
render() {
return <div>Bar 123</div>;
}
};
class App extends React.Component {
render() {
const all = {
'Foo': Foo,
'Bar': Bar,
};
// For the sake of the demo, just randomly pick one of the two
// usually this would come from an import, or something similar
const randomKey = ['Foo', 'Bar'][Math.floor(Math.random() * 2)];
// The resolved component must begin with a capital letter
const Type = all[randomKey];
return (
<div>
<Type />
</div>
);
}
};
ReactDOM.render(<App />, document.getElementById('root'));
JSBin: http://jsbin.com/noluyu/5/edit?js,output
Edit 2
Наши типичные приложения, которые делают компоненты динамически, как правило, имеют индекс. js-файл в корне каталога всех компонентов, этот сим PLE перечислить все возможные компоненты:
// index.js
export Breadcrumb from './breadcrumb/Breadcrumb';
export Checkbox from './checkbox/Checkbox';
export Comment from './comment/Comment';
Тогда все, что вам нужно сделать, это что-то вроде:
import AllComponents from './index.js';
const myType = 'Checkbox';
const Type = AllComponents[myType];
.. later ..
return <div><Type /></div>;
Не удается решить модуль 'Компоненты' –
Очевидно, что вам нужен список доступных компонентов. Я отредактирую, чтобы показать встроенный пример ... – Chris
Но я не могу вручную перечислить все компоненты. Есть ли другой способ сделать это динамически. –