Dynamische Instanziierung von untergeordneten Komponenten nach String-Namen - ReactJs

Ich habe ein Array, das die Namen der React Component-Zeichenfolgen enthält ("SampleWidget1"). Es wird von einem externen Mechanismus bevölkert. In meiner DashboardInterface-Komponente möchte ich dieses Array verwenden, die darin enthaltenen Komponenten rendern und es unter anderem statisch definierten HTML-Code in der DashboardInterface.render-Funktion anzeigen. Wie kann ich das in React machen?

Below ist mein Versuch; Es gibt keine Fehler, aber die gerenderten Komponenten werden nie erfolgreich in das DOM eingefügt. Wenn ich das SampleWidget1 manuell zur DashboardInterface.render-Funktion () hinzufüge, wird es wie erwartet angezeigt. Wenn ich dasselbe mit der dynamisch gerenderten Komponente mache, wird sie nicht angezeigt.

Irgendwelche Vorschläge

var widgetsToRender = ["SampleWidget1"];

/**
 * Dashboard that uses Gridster.js to display widget components
 */
var DashboardInterface = React.createClass({

    /**
     * Loads components within array by their name
     */
    renderArticles: function(widgets) {

        if (widgets.length > 0) {

            var compiledWidgets = [];

            // Iterate the array of widgets, render them, and return compiled array
            for(var i=0; i<widgets.length; i++){
                compiledWidgets.push(React.createElement(widgets[i] , {key: i}));
            }

            return compiledWidgets;

        }
        else return [];
    },

    /**
     * Load the jQuery Gridster library
     */
    componentDidMount: function(){

        // Initialize jQuery Gridster library
        $(".gridsterDashboard ul").gridster({
            widget_margins: [10, 10],
            widget_base_dimensions: [140, 140],
            //shift_larger_widgets_down: false
        });

    },

    render: function() {

        // Get the widgets to be loaded into the dashboard
        var widgets = this.renderArticles(widgetsToRender);

        return (
                <div className="gridsterDashboard">
                    <ul >
                        {this.widgets}
                        <SampleWidget1 />
                    </ul>
                </div>
        );
    }

});

Hier ist eine Beispielkomponente, die ich rendern möchte:

/**
 * Sample component that return list item that is to be insert into Gridster.js 
 */
var SampleWidget1 = React.createClass({

    render: function() {

        // Data will be pulled here and added inside the list item...

        return (
            <li data-row="1" data-col="1" data-sizex="2" data-sizey="1">testing fake component</li>
        )

    }

});



ReactDOM.render(
  <DashboardInterface />,
  document.getElementById('dashboard')
);

Antworten auf die Frage(2)

Ihre Antwort auf die Frage