2016-05-04 2 views
3

Ich habe einen Picker in meiner App, und ich möchte dies mit Daten auf dem Server abgerufen, habe ich die Daten in einem Zustand der App, aber ich don ' t wissen, wie die App machen den Picker zu aktualisieren, wenn die Daten abgerufen wirdWie man Picker (Android) von nativen mit Fetch füllen

constructor(props) { 
    super(props); 
    this.state = { 
     isLoading: false, 
     client: '', 
     clients: null 
    }; 
    } 

componentDidMount() { 
    this.fetchData(); 
    } 

ich habe dies in meiner Ansicht

<Picker 
       style={styles.picker} 
       itemStyle={styles.items} 
       selectedValue={this.state.client} 
       onValueChange={(cli) => this.setState({client: cli})} 
       prompt="Seleccione un cliente" > 
       <Picker.Item label="Cliente 1" value="1" /> 
       <Picker.Item label="Cliente 2" value="2" /> 
       <Picker.Item label="Cliente 5" value="5" /> 
       <Picker.Item label="Cliente 4" value="4" /> 
       <Picker.Item label="Cliente 3" value="3" /> 
       <Picker.Item label="Cliente 9" value="9" /> 
       <Picker.Item label="Cliente 8" value="8" /> 
      </Picker> 

und die FetchData Funktion

fetchData() { 
    var baseURL = 'http://192.168.100.11:3000/clients'; 
    fetch(baseURL, { 
     headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
     } 
    }) 
     .then((response) => response.json()) 
     .then((responseData) => { 
      if(responseData.message){ 
      this.setState({isLoading: !this.state.isLoading}); 
      alert(responseData.message); 
      }else{ 
      this.setState({isLoading: !this.state.isLoading, clients:responseData}); 
      } 
     }) 
     .done(); 
    } 

Die Sache ist, wie kann ich den Picker aktualisieren, wenn die Daten abgerufen werden.

dank

Antwort

3

Sie sollten die Picker Elemente basierend auf dem Zustand gesetzt, indem sie abbildet, zum Beispiel:

<Picker style={styles.picker} 
     itemStyle={styles.items} 
     selectedValue={this.state.client} 
     onValueChange={(cli) => this.setState({client: cli})}> 
      {this.state.clients.map((l, i) => {return <Picker.Item value={l} label={"Cliente " + i} key={i} /> })} 
    </Picker> 

Wenn Sie die Daten aus Abruf erhalten, müssen Sie nur den Zustand der „Kunden“ aktualisieren, wie Sie tun, und die Picker-Artikel werden automatisch aktualisiert.

Ein Beispiel ist hier zu finden, wo die Elemente auf den Button aktualisiert basieren: https://rnplay.org/apps/XfkfnQ

+0

mein Anfangszustand ist null, weil ich einen Abruf zu machen, und die Daten kommen wie diese [{ „id“: 3, "name": "client 3"}, {"id": 2, "name": "client 2"}] ... also mache ich so etwas mit deinem Beispiel {this.state.clients.map ((data) => {return })} ... aber das besagt, dass null kein Objekt ist – xploshioOn

+0

Nun, ich setze Clients mit diesem [{ "id": "1", "name": "loading ..."}] im initialen zustand und mit einigen änderungen funktioniert es, danke für die hilfe. – xploshioOn