Der Schlüssel bisschen fehlt, und ich weiß nicht, ob es irgendwo dokumentiert ist, aber man braucht einen Großbuchstaben für die JSX Compiler verwenden (?) Es als eine Art zu recoginise.
import AllComponents from 'Components';
const FooType = 'Foo';
return (
<div className="wrapper">
<div>Hello World</div>
<AllComponents[FooType] />
</div>
);
Bearbeiten - Gemäß den Kommentaren
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
bearbeiten 2
Unsere typische Anwendungen, die Komponenten dynamisch machen, in der Regel einen Index haben. Js-Datei an der Wurzel aller Komponenten Verzeichnis, das Sim ple alle möglichen Komponenten auflisten:
// index.js
export Breadcrumb from './breadcrumb/Breadcrumb';
export Checkbox from './checkbox/Checkbox';
export Comment from './comment/Comment';
alles, was Sie dann ist, wie etwas zu tun haben:
import AllComponents from './index.js';
const myType = 'Checkbox';
const Type = AllComponents[myType];
.. later ..
return <div><Type /></div>;
kann nicht Modul ‚Komponenten‘ lösen –
Natürlich müssen Sie eine Liste der verfügbaren Komponenten haben. Ich werde bearbeiten, um ein Inline-Beispiel zu zeigen ... – Chris
Aber ich kann nicht manuell alle Komponenten auflisten. Gibt es eine andere Möglichkeit, dies dynamisch zu tun? –