2017-08-24 4 views
0

Ich versuche, eine Beispielanwendung basierend auf react_on_rails gem zu erstellen. In meinem Reaction Code reagieren die inbuild Funktionen wie onChange oder onSubmit nicht.Reagieren onChange-Methode funktioniert nicht in react_on_rails

Meine HelloWorldWidget Komponente sieht so aus.

... 
constructor(props, context) { 
    super(props, context); 
    _.bindAll(this, 'handleChange'); 
} 

handleChange(e) { 
    const name = e.target.value; 
    console.log(name); 
    //this.props.updateName(name); 
} 

render() { 
    const { name } = this.props; 
    return (
    <div className="container"> 
     <h3> 
     Hello, {name}! 
     </h3> 
     <input className="form-control input-sm col-sm-4" type="text" onChange={this.handleChange}/> 
    </div> 
); 
} 

Auch wenn ich Server-Seite vorrendern meiner Komponente in meiner views/hello_world/index.html.erb Datei deaktivieren dann die Komponente rendert nicht auf UI.

<%= react_component("HelloWorldApp", props: @hello_world_props , prerender: false) %> 

Github Repo: react-on-rails-sample-app

+0

erhalten Sie Fehler? und was ist '_.bindAll (this, 'handleChange');'? –

+0

Keine Fehler. Es ist die lodash-Funktion, die alle unsere Funktionen an diesen "Kontext" bindet. –

Antwort

0

Versuchen Sie, Pfeil Funktionen wie folgt zu verwenden:

onChange={(e) => this.handleChange(e)} 
+0

Ich habe das früher versucht, aber nicht funktioniert. Dieses Problem kann daran liegen, dass das serverseitige Rendering wahr ist, aber ich bin mir nicht sicher, was genau passiert. –

1

Ich bin nicht sicher, wo _.bindAll Methode herkommt, aber die orthodoxe Weise der Bindung Handler ist mit diesem Syntax:
this.handleChange = this.handleChange.bind(this);

Wenn Sie Pfeilfunktion verwenden, müssen Sie nicht binden Sie es an die class;

handleChange = (e) => { 
    const name = e.target.value; 
    console.log(name); 
    //this.props.updateName(name); 
} 
+0

'_.bindAll' ist eine lodash-Funktion, um mehrere Funktionen miteinander zu verbinden. Ich habe versucht mit 'this.handleChange = this.handleChange.bind (this);' aber es ist dasselbe, meldet sich nicht in der Konsole an. –

Verwandte Themen