2016-07-29 8 views
0

Ich verwende eine Komponente, um die Eingabe von Select SelectInput durchzuführen.Übergeben Sie Wert von Kind zu Eltern ohne OnChange reagieren

Hier ist mein Code:

'use strict' 
import React from 'react' 

class SelectInput extends React.Component{ 
    constructor(props){ 
     super(props); 
     this.state = { 
      select: "", 
      items: [] 
     } 
     this.handleChange = this.handleChange.bind(this)  
    } 

    . 
    . 
    . 

    handleChange(event){ 
     console.log(event.target.value) 
     this.setState({ 
      select: event.target.value 
     }); 
     if(this.props.onChange) { 
      this.props.onChange(event) 
     } 
    } 

    render(){ 
     let disabled = this.state.items.length > 1 ? false : true, 
      selected = this.state.items ? this.state.items[0] : "" 
     return (
      <select name={this.props.name} disabled={disabled} defaultValue={selected} value={this.state.select} onChange={this.handleChange}> 
       {this.state.items && this.state.items.map(item => 
        <option value={item} >{item}</option> 
       )} 

      </select> 
     ) 
    } 
} 

Mein Problem ist, wenn mein select nur eine Option hat, wie ich die Auswahl deaktivieren und den Wert als Standard ein. Aber ich bekomme nicht den Wert des Ereignisses bei onChange, um an die Elternkomponente zu übergeben.

Wie mache ich das?

Vielen Dank im Voraus

+0

, wenn Sie Element deaktivieren? Warum gehst du außer einem Änderungsereignis aus? und warum deaktivierst du das Element? Warum interagiert der Benutzer mit einem deaktivierten Element? –

+0

Ich deaktiviere das Element, weil die Komponente nur einen Client hat und diese Komponente diesen Client kennt. Ich habe auch eine Liste von Ländern, aber in diesem Moment habe ich nur ein Land. Warum also werde ich die Auswahl aktivieren? Und wenn ich zwei oder mehr Elemente habe und den Standardwert auf das erste Element der Liste setze, wie kann ich dieses Element an die Elternkomponente übergeben, wenn ich die Auswahl nicht geändert habe? –

+0

in diesem Fall können Sie die 'handleChange()' beim Rendern selbst aufrufen, wenn keine der Elemente 1 ist. Weil der Benutzer keine Möglichkeit hat, mit dem Element zu interagieren. –

Antwort

1

Ich gehe davon aus, dass, wenn Sie die handleChange Methode sogar mit einem Punkt nennen wollen, ist von Requisiten einen Zustand up-to-date oder/und rief den Handler onChange übergeben zu haben.

An einem gewissen Punkt Ihre state.items müssen gefüllt werden:

componentWillMount(){ 
    // load data (ajax or hard-coded) 
    let items = ['toto']; 
    let select = items.length ? items[0] : ''; 
    this.setState({ 
    items, 
    select 
    }); 
    if(this.props.onChange) { 
    this.props.onChange(select); 
    } 
} 

ich die selected Variable und das defaultValue Attribut in der render Verfahren entfernt:

render(){ 
    let disabled = this.state.items.length > 1 ? false : true; 

    return (
     <select name={this.props.name} disabled={disabled} value={this.state.select} onChange={this.handleChange}> 
     {this.state.items && this.state.items.map((item, i) => 
      <option key={i} value={item} >{item}</option> 
     )} 
     </select> 
    ) 
} 
+0

Großartiger Punkt;) Es war etwas wie das, wonach ich suchte –