2017-07-13 3 views
0

Cela fonctionne comme prévu, où le sélecteur reste sur l'élément sélectionné ...React natif Picker revient au premier élément

<Picker 
    selectedValue={this.state.person} 
    onValueChange={(itemValue) => this.setState({person: itemValue})} 
    style={styles.picker}> 
    {Object.keys(coWorkers) 
     .map((result, index) => 
      <Picker.Item 
       label={`${coWorkers[result].name}(${coWorkers[result].likes})`} 
       value={coWorkers[result].name} 
       key={index} 
      /> 
     ) 
    } 
</Picker> 

Je veux obtenir plusieurs clés/valeurs de l'objet coWorkers dans this.setState, donc J'essaie ... ce

<Picker 
    selectedValue={this.state.person} 
    onValueChange={(itemValue) => this.setState({person: itemValue.name, likes: itemValue.likes})} 
    style={styles.picker}> 
    {Object.keys(coWorkers) 
     .map((result, index) => 
      <Picker.Item 
       label={`${coWorkers[result].name} (${coWorkers[result].likes})`} 
       value={coWorkers[result]} 
       key={index} 
      /> 
     ) 
    } 
</Picker> 

Cependant, maintenant le sélecteur revient en arrière vers le haut (this.state est en cours de mise à jour correctement si).

Répondre

1

Le type de l'accessoire value pour le sélecteur doit être une chaîne ou un nombre entier. Il n'est pas clair à partir des docs sur le site mais vous pouvez le voir dans les commentaires de code source Picker ici https://github.com/facebook/react-native/blob/master/Libraries/Components/Picker/Picker.js

Il fait une simple vérification égale de selectedValue et la valeur des éléments de sélecteur pour le traduire au natif PickerIOS comprend. https://github.com/facebook/react-native/blob/master/Libraries/Components/Picker/PickerIOS.ios.js#L53

Bien que le contenu est l'objet même this.state.selectedValue et correspondant à coWorkers[result] sont des objets différents

Vous pouvez générer des identifiants uniques pour chaque élément du tableau et l'utiliser pour rechercher l'objet.

+0

Le PropType pour 'value' dans le code source que vous avez lié est' any', pas de chaîne/entier – lfkwtz