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

11

У меня есть сборщик, который я тестирую на 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, но это также не решило проблему.

  • 1
    изменить onValueChange на this.setState ({pickerValue: value});
Теги:
react-native

2 ответа

14
Лучший ответ

При изменении значения вам нужно указать, какое свойство состояния было изменено, и соответственно изменить его с помощью 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>
-1

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

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>
    );
  }
  • 2
    Хотя ответы всегда приветствуются, этот вопрос был задан год назад, и уже было принято решение. Пожалуйста, постарайтесь не «задевать» вопросы сверху, предоставляя ответы на них, если только вопрос не был помечен как решенный, или вы не нашли новое и улучшенное решение проблемы. Также не забудьте предоставить некоторый контекст, окружающий ваш код, чтобы помочь объяснить это. Ознакомьтесь с документацией по написанию отличных ответов, чтобы узнать, как сделать так, чтобы ваши ответы учитывались :)
  • 1
    Это рекомендуемый отступ? Я новичок в React-Native, просто спрашиваю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню