2016-06-02 4 views
11

Mam próbnik, który testuję teraz na iOS z dwoma opcjami. Za każdym razem, gdy przeciągam od pierwszej opcji do drugiej opcji, selektor natychmiast powraca do pierwszej opcji.Jak sprawić, aby wybieracz reagujący na normę pozostał w nowo wybranej opcji?

Oto, jak wygląda mój kod dla mojego selektora.

<Picker 
     style={{ 
     width: 100, 
     }} 
     selectedValue={(this.state && this.state.pickerValue) || 'a'} 
     onValueChange={(value) => { 
     this.setState({value}); 
     }} itemStyle={{color: 'white'}}> 
     <Picker.Item label={'Hello'} value={'a'} /> 
     <Picker.Item label={'World'} value={'b'} /> 
</Picker> 

Chcę, aby selektor pozostał przy nowo przewiniętym do. Usunąłem również część || 'a' z atrybutu selectedValue, ale to też nie rozwiązało problemu.

+1

zmiana onValueChange do this.setState ({pickerValue: wartość}); – Nakib

Odpowiedz

14

Na zmianę wartości trzeba określić, które własnością państwa zmieniło i zmienić go odpowiednio z this.setState

onValueChange={(value) => {this.setState({pickerValue: value}); 

Pełny kod

<Picker 
     style={{ 
     width: 100, 
     }} 
     selectedValue={(this.state && this.state.pickerValue) || 'a'} 
     onValueChange={(value) => { 
     this.setState({pickerValue: value}); 
     }} itemStyle={{color: 'white'}}> 
     <Picker.Item label={'Hello'} value={'a'} /> 
     <Picker.Item label={'World'} value={'b'} /> 
</Picker> 
-1

użyłem tego "hack":

render() { 
    const values = ['1', '2']; 

    return (
     <Picker 
     value={this.state.value} 
     onValueChange={this.onValueChange.bind(this)} 
     > 
     { 
       <Picker 
        value={this.state.value} 
        onValueChange={this.onValueChange.bind(this)} 
       > 
       { 
        [<Picker.Item 
         label="n/a" 
         value={null} 
        />].concat(values.map(value => { 
          return (
           <Picker.Item 
            label={value} 
            value={value} 
           /> 
          ) 
          }) 
        ) 
       } 
       </Picker> 
    ); 
    } 
+1

Podczas gdy odpowiedzi są zawsze doceniane, to pytanie zadano ** rok ** temu i już przyjęto rozwiązanie. Staraj się unikać "podskakiwania" pytań na górę, udzielając odpowiedzi na nie, chyba że pytanie nie zostało już oznaczone jako rozwiązane lub znalazłeś nowe i ulepszone rozwiązanie problemu. Pamiętaj również, aby podać [** kontekst otaczający twój kod **] (https://meta.stackexchange.com/questions/114762), aby pomóc to wyjaśnić. Zapoznaj się z dokumentacją na temat [** pisania świetnych odpowiedzi **] (http://stackoverflow.com/help/how-to-answer), aby uzyskać porady dotyczące liczenia odpowiedzi :) –

+1

Czy to jest zalecane wcięcie? Jestem nowy w React-Native, tylko pytam. – ratsimihah