【问题标题】:How do I setState id when name is selected in the picker dropdown?在选择器下拉列表中选择名称时如何设置状态 ID?
【发布时间】:2019-05-30 18:07:34
【问题描述】:

我有一个以下格式的 json 数组

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

我正在使用下面的代码进行下拉。现在我可以设置名称,但我想在下拉列表中显示名称,并设置所选名称的相应 id。我正在使用 react-native 选择器。我该怎么做?

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

【问题讨论】:

    标签: react-native picker


    【解决方案1】:

    您只需要将 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>
    

    完整的工作示例:

    https://snack.expo.io/HJwLcXT6E

    【讨论】:

      猜你喜欢
      • 2016-08-18
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多