如何在React-native中使用Picker设置setState?

时间:2019-03-09 07:28:47

标签: javascript react-native picker setstate

我在省份搜索中的项目中的一项功能,但现在我使用的是省份名称,现在我想在React-native中使用Picker从用户选择的值中设置状态。如何从用户选择的值中设置状态来自Picker?

我的搜索功能和构造函数。

  constructor(props) {
    super(props);
    this.state = {
     currentCity: "Phuket",
     searchText: ""
 };
 this.handleSubmit = this.handleSubmit.bind(this);
}

handleSubmit(event) {
 event.preventDefault();
 const { searchText } = this.state;
 this.refs.modal3.close();
 this.setState({ currentCity: searchText });
}

我的搜索框和选择器。

<TextInput
        placeholder="City name"
        ref={el => (this.element = el)}
        style={styles.textInput}
        value={this.state.searchText}
        onChangeText={searchText => this.setState({ searchText })}
      />
      <View>
        <Button style={styles.btn} onPress={this.handleSubmit}>
          <Text style={styles.submitText}>Submit</Text>
        </Button>
      </View>
      {//Dropdown Picker
      }
      <Picker
        selectedValue={this.state.language}
        style={{ height: 50, width: 200 }}
        onValueChange={(itemValue, itemIndex) =>
          this.setState({ language: itemValue })
        }
      >
        <Picker.Item label="Amnat Charoen" value="1906689" />
        <Picker.Item label="Ang Thong" value="1621034" />
        <Picker.Item label="Bangkok" value="1609350" />

1 个答案:

答案 0 :(得分:1)

从您在问题中提供的代码,我认为您是本机反应的新手。您的代码有误(您只是复制并粘贴了代码)。 selectedValue={this.state.language}中的Picker这部分是错误的,因为您的language中没有state

想象您有一个Picker,其中包含城市列表。并且您有一个状态为selectedCity的变量。

所以您的选择器会像这样:

<Picker
  selectedValue={this.state.selectedCity}
  onValueChange={(itemValue, itemIndex) =>
  this.setState({ selectedCity: itemValue })
  }
 >
   <Picker.Item label="city1" value="1" />
   <Picker.Item label="city2" value="2" />
</Picker>

这将使Picker列出2个城市(city1-city2),并且每当用户选择其中一个this.setState()时,就会调用selectedCity并初始化状态。

如果您想用另一种方法而不是

来调用setState
onValueChange={(itemValue, itemIndex) =>
      this.setState({ selectedCity: itemValue })
      }

使用

onValueChange={(itemValue, itemIndex) =>
     //call method here!
      }