2016-08-21 7 views
0
klicken

ich habe eine <select> in meiner reagieren Apponchange Ereignis auf Auswahltrigger reagieren nur durch

<select onChange={ e=>{this.setState({selectedValue:e.target.value})} }> 
    {this.state.someArr.map(val => <option value={val}> something </option>) } 
</select> 

jetzt, wenn someArr in den Zustand ändert, ist es, die neuen Optionen innerhalb select-Element gerendert verursachen
aber onchange nicht ausgelöst und selectedValue innerhalb des Staates bleibt unberührt
Wie kann ich dieses Problem überwinden? i neuer Wert will

HERE IS JSBIN

+0

Haben Sie 'onChange' (camelCase) ausprobiert? –

+0

Ja, ich habe CamelCase One verwendet. das ist mein Tippfehler in Frage – hamidkardorost

+0

Einstellung der Wert Prop auf Select könnte funktionieren: '' – vijayst

Antwort

0

allererst automatisch einzustellen, wenn Sie mit Reagieren sollte nie einen Pfeil Funktion übergeben, weil es andere Instanz jedes Mal passiert und kann somit nicht mehr notwendig verursachen.

Der Grund, warum es nicht funktioniert, ist, weil Sie versuchen, auf das Ereignis in der Funktion setState zuzugreifen, und Sie können das nicht tun.

Hier ist, was Sie tun sollten:

export default class Component extends React.Component { 
    constructor(props) { 
     super(props); 

     this.state = { 
      selectedValue: '', 
      someArr: [] 
     }; 
    } 

    onChange(e) { 
     let value = e.target.value; 
     this.setState({ selectedValue: value }); 
    } 

    render() { 
     return <select onChange={this.onChange}}> 
       {this.state.someArr.map(val => <option value={val}> something </option>) } 
      </select> 
    } 
} 
+0

Vielen Dank für Ihren guten Rat, aber das hat noch nicht funktioniert. Das Problem ist, wenn Sie 'someArr' ändern, werden neue Optionen im select-Element gerendert, aber' onChange' wird nie aufgerufen, wenn der Benutzer nicht auf einige Optionen klickt. aber ich will 'onChange' aufgerufen automatisch nach neuen gerenderten Optionen – hamidkardorost

+0

Sie können versuchen, den Index zu jeder Option mit dem zweiten Argument der Map-Funktion übergeben und speichern Sie die selectedIndex in Ihrem Zustand, und wenn das Array ändert, neu den ausgewählten Wert nach Der Index. – Pachu

0

Alles, was Sie tun müssen, um richtig die value prop gesetzt.

<select value={this.state.selectedValue} onChange={ e=>{this.setState({selectedValue:e.target.value})} }> 
    {this.state.someArr.map(val => <option value={val}> something </option>) } 
</select> 

Ich hoffe, das funktioniert für Sie.

Verwandte Themen