2017-01-19 3 views
1

Ich beginne ein neues Projekt, wo ich Flask + React + Bootstrap benutze, aber das Bootstrap innerhalb JSX funktioniert aus irgendeinem Grund nicht.Reagiere nicht mit Bootstrap

Ich benutze gulp-react um JSX in JS zu verwandeln.

ist die JSX (wörtlich: ein Beispiel aus Bootstrap-Website):

var Example = React.createClass({ 
    render:() => { 
    return (
     <div class="input-group"> 
     <span class="input-group-addon" id="basic-addon1">@</span> 
     <input type="text" class="form-control" placeholder="Username" aria-describedby="basic-addon1" /> 
     </div> 
    )} 
}); 

ReactDOM.render(
    <Example />, 
    document.getElementById('main') 
); 

und die transformierten JS:

var Example = React.createClass({displayName: "Example", 
    render: function() { 
    return (
     React.createElement("div", {class: "input-group"}, 
     React.createElement("span", {class: "input-group-addon", id: "basic-addon1"}, "@"), 
     React.createElement("input", {type: "text", class: "form-control", placeholder: "Username", "aria-describedby": "basic-addon1"}) 
    ) 
    )} 
}); 

ReactDOM.render(
    React.createElement(Example, null), 
    document.getElementById('main') 
); 

Wenn ich den HTML-Code in die HTML-Vorlage kopieren und einfügen, alles erscheint wie erwartet. Wenn ich Example.render durch ein einfaches <h1>Text</h1> ersetze, macht es auch fein.

Was könnte das Problem sein?

+0

Mögliches Duplikat von [Keine Klassen auf Elemente replizieren] (http://stackoverflow.com/questions/39442184/react-not-rendering-classes-on-elements) – Li357

+0

Sie verwenden class anstelle von className. –

Antwort

3

Wenn wir JSX schreiben, schreiben wir immer noch in JavaScript, nur mit einer anderen Syntax. In JavaScript ist 'class' ein Schlüsselwort, was bedeutet, dass wir 'class' nicht verwenden können, wenn wir nicht gerade versuchen, einen zu definieren. Also, dies zu umgehen, müssen Sie ersetzen ‚class‘ mit ‚classname‘ als solche:

var Example = React.createClass({ 
    render:() => { 
    return (
     <div className="input-group"> 
     <span className="input-group-addon" id="basic-addon1">@</span> 
     <input type="text" className="form-control" placeholder="Username" aria-describedby="basic-addon1" /> 
     </div> 
    )} 
}); 

ReactDOM.render(
    <Example />, 
    document.getElementById('main') 
); 

In Ihren HTML-Dateien, aber würden Sie nicht ‚classname‘ verwenden, wäre es einfach sein ' Klasse 'wie du es ursprünglich versucht hast.

+0

Danke für die Antwort, aber aus irgendeinem Grund hat das das Problem nicht behoben. Trotzdem wird nichts gerendert. – user3642365

+0

Stellen Sie außerdem sicher, dass Sie das Bootstrap-Stylesheet (entweder aus einem Inhaltsverteilungsnetzwerk (CDN) oder einer Kopie in Ihrem Dateisystem) in Ihrem HTML-Code enthalten. Ich habe auch vergessen, die erste Instanz von 'class' in 'className' zu ändern. Also, wenn Sie meinen Code kopiert und eingefügt haben, hätte das Sie beeinflusst – bwalshy

+0

Nur eine einfache Frage: Enthält Ihr html 'Dokument' ein Element mit der ID' main'? – jakee