2017-04-16 1 views
0

Ich habe diese documentation gefolgt und haben ein Select-Tag mit reagieren erstellt.
Ich habe diese Frage bearbeitet, Wenn ich className = "browser-default" in auswählen, funktioniert es gut. Aber für materialisieren wählen Sie, es funktioniert nicht.
OnChange-Ereignis funktioniert nicht in meinem Fall. Die Funktion wird nicht aufgerufen.Mein onChange funktioniert nicht mit reagieren

import React from 'react'; 

class Upload extends React.Component{ 
    constructor(props){ 
     super(props); 
     this.state={ 
      degree:'' 
     } 
     this.upload=this.upload.bind(this); 
     this.degreeChange=this.degreeChange.bind(this); 
    } 
    componentDidMount() { 
     $('select').material_select(); 
    } 
    degreeChange(event){ 
     this.setState({degree:event.target.value}); 
     console.log(this.state.degree); 
    } 
    upload(){ 
     alert(this.state.degree); 
    } 
    render() { 
     return (
      <div className="container"> 
      <form onSubmit={this.upload}> 
       <div className="input-field col s4"> 
         <select value={this.state.degree} onChange={this.degreeChange}> 
          <option value="" disabled>Choose Degree</option> 
          <option value="B.E">B.E</option> 
          <option value="B.Tech">B.Tech</option> 
         </select> 
       </div> 
       <div className="row center-align"> 
        <input className="waves-effect waves-light btn centre-align" type="submit" value="Submit"/> 
       </div> 
      </form> 
     </div> 
     ); 
    } 
} 

Ich habe nicht einen Fehler hier, aber meine degreeChange Funktion nicht aufgerufen wird. Ich verstehe nicht, was mein Fehler ist.

+0

Mögliche Duplikat [OnChange-Ereignis für Drop JS Reagieren down] (http://stackoverflow.com/questions/28868071/onchange-event-using-react-js-for-drop-down) –

+0

@JohnRuddell, ich denke, das ist kein Duplikat des Links, den Sie eingefügt haben, das ist verwandt mit ** asynchrone Natur von setState **, das hat kein 'onChange' Problem. –

+0

Mögliches Duplikat von [So erhalten Sie den neuesten Wert aus dem ausgewählten Dropdown] (http://stackoverflow.com/questions/39506293/how-to-get-the-latest-value-from-selected-drop-down) –

Antwort

0

Es ist nichts falsch mit Ihrem Code. Bist du sicher, dass es nicht funktioniert? Vielleicht nehmen Sie an, dass der eingestellte Zustand synchron ist, wenn es nicht synchron ist. Versuchen Sie, die target.value zu protokollieren. Sie können den Zustandswert auch in einem Callback zu Ihrem setstate ausdrucken.

degreeChange(event){ 
    console.log(`event value is ${event.target.value}`); 
    this.setState({degree:event.target.value},() => { 
     console.log(this.state.degree); 
    }); 
} 

Fiddle of your exact code versuchen, das Element zu ändern. Sie werden sehen, dass dieser Zustand hinter einem liegt. Das liegt daran, dass der Zeitpunkt, zu dem Sie den Status drucken, den Renderzyklus noch nicht abgeschlossen hat und der Status nicht aktualisiert wurde.

Fiddle of my changes

+0

Ich sehe, dass es in Geige arbeitet. Aber es funktioniert nicht in meinem Fall. Selbst die console.log vor setState funktioniert nicht. Es sieht so aus, als ob die degreeChange-Funktion selbst nicht aufgerufen wird. –

+0

Ich benutze wählen von 'http: // materialisecss.com/forms.html' Ich habe meine '$ (' select '). Material_select();' in der ComponentDidMount() -Methode. Wenn ich die Standard-Auswahl mache, funktioniert es gut. –

+0

sollten Sie jquery nicht mit react verwenden. sie sind kontraproduktiv, da sie in vielen Fällen dasselbe tun –

Verwandte Themen