在选择器下拉列表中选择名称时如何设置状态 ID?
How do I setState id when name is selected in the picker dropdown?
我有一个 json 数组,格式如下
this.state = {
allTeachers: [
{
"id": "qKUd5GoBwpolnxM4upjo",
"name": "XYZ",
"subject": "Science"
},
{
"id": "qaUe5GoBwkrtnxM4kOip",
"name": "Vidya",
"subject": "Mathematics"
}
]
}
我正在使用以下代码进行下拉。现在我可以设置名称,但我想在下拉列表中显示名称,并设置所选名称的相应 ID。我正在使用本机选择器。我该怎么做?
<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>
您只需将PickerItem 的值设置为相应的id。
这意味着改变:
<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
的新状态变量,并将 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>
完整的工作示例:
我有一个 json 数组,格式如下
this.state = {
allTeachers: [
{
"id": "qKUd5GoBwpolnxM4upjo",
"name": "XYZ",
"subject": "Science"
},
{
"id": "qaUe5GoBwkrtnxM4kOip",
"name": "Vidya",
"subject": "Mathematics"
}
]
}
我正在使用以下代码进行下拉。现在我可以设置名称,但我想在下拉列表中显示名称,并设置所选名称的相应 ID。我正在使用本机选择器。我该怎么做?
<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>
您只需将PickerItem 的值设置为相应的id。 这意味着改变:
<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
的新状态变量,并将 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>
完整的工作示例: