Подтвердить что ты не робот

Как заставить реагировать на родной выборщик на выбранный вариант?

У меня есть сборщик, который я тестирую на iOS прямо сейчас с двумя вариантами. Каждый раз, когда я перехожу от первого варианта ко второму параметру, сборщик немедленно возвращается к первому варианту.

Вот как выглядит мой код для моего выбора.

<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>

Я хочу, чтобы селектор оставался в новой прокрученной опции. Я также удалил часть || 'a' атрибута selectedValue, но это также не решило проблему.

4b9b3361

Ответ 1

При изменении значения вам нужно указать, какое свойство состояния было изменено, и соответственно изменить его с помощью this.setState

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

Полный код

<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>

Ответ 2

Я использовал этот "взлом":

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>
    );
  }