Как установить идентификатор состояния, когда имя выбрано в раскрывающемся списке выбора?

У меня есть массив json в формате ниже

  this.state = {
    allTeachers: [
        {
            "id": "qKUd5GoBwpolnxM4upjo",
            "name": "XYZ",
            "subject": "Science"
        },
        {
            "id": "qaUe5GoBwkrtnxM4kOip",
            "name": "Vidya",
            "subject": "Mathematics"
        }
    ]
  }

И я использую приведенный ниже код для раскрывающегося списка. Теперь я могу установить имя, но я хочу показать имя в раскрывающемся списке и установить соответствующий идентификатор выбранного имени. Я использую сборщик реактивов. Как я могу это сделать?

<View style  = {styles.dropdownInput}>
{
    <Picker
        selectedValue = {this.state.teacher_name}
        style = {styles.pickerCss}
        onValueChange = {(itemValue, itemIndex) => this.setState({teacher_name: itemValue})}
    >
    <Picker.Item label='Select Teacher' value='0' />
    {
        this.state.allteachers ?
            this.state.allteachers.map((item,key) => (
                <Picker.Item label = {item.name} value = {item.name} />
            ))
        :
        false
    }
    </Picker>
}
</View>
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
0
0
456
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам просто нужно установить значение PickerItem на соответствующий идентификатор. Это означает изменение:

<Picker.Item label = {item.name} value = {item.name} />

к

<Picker.Item label = {item.name} value = {item.id} />

Сейчас

onValueChange = {(itemValue, itemIndex) => this.setState({teacher_name: itemValue})}

сохраняет teacher_id в переменной состояния teacher_name. Вы можете создать новую переменную состояния с именем teacher_id в своем конструкторе и сохранить там идентификатор.

Кроме того, Я бы рекомендовал небольшой рефакторинг. Вместо:

{
    // btw here is a typo your array is called allTeachers
    this.state.allteachers ?
        this.state.allteachers.map((item,key) => (
            <Picker.Item label = {item.name} value = {item.name} />
        ))
    :
    false
}

Я бы создал функцию renderPickterItems:

renderPickerItems(allTeachers){
    if (allTeachers) {
       return(
        allTeachers.map((item,key) => (
        <Picker.Item label = {item.name} value = {item.id} />
        ))
    );
    }   
  }

который вы можете вызвать с помощью:

 <Picker.Item label='Select Teacher' value='0' />
    {this.renderPickerItems(this.state.allTeachers)}
 </Picker>

Полный рабочий пример:

https://snack.expo.io/HJwLcXT6E

Другие вопросы по теме