我有一个带有TextInput,Picker和TouchableHiglight的表单。
用户将在TextInput中输入内容,从Picker中选择一个项目并使用TouchableHighlight提交。
我可以使用ref来重置TextInput,但我无法弄清楚如何将Picker值更改/重置为默认值。
可能未处理的承诺拒绝
TypeError:this.value2ref.setNativeProps不是函数
阵营天然
constructor(props) {
super(props);
this.state = {
value1: '',
value1ref: '',
value2: '',
value2ref: ''
}
}
<TextInput
onChangeText={(text) => this.setState({value1:text})}
ref={input => {this.value1ref=input}}
/>
<View>
<Picker
selectedValue={this.state.value1}
onValueChange={(itemValue, itemIndex) => this.setState({value2: itemValue})}
ref={input => {this.value2ref=input}}>
<Picker.Item label="Pick an item" value="" />
<Picker.Item label="Item 1" value="Item1" />
<Picker.Item label="Item 2" value="Item2" />
<Picker.Item label="Item 3" value="Item3" />
</Picker>
</View>
<View>
<TouchableOpacity onPress={this.onSubmit.bind(this)}>
<View>
<Text>SUBMIT</Text>
</View>
</TouchableOpacity>
</View>
我也尝试过这种类型的参考,但无济于事。
ref={component => this._exampleref=component}>
的JavaScript
onSubmit() {
this.value1ref.setNativeProps({ //This one works
text: "",
});
this.value2ref.setNativeProps({ // This one does NOT work
selectedValue: "",
});
}
我知道我可以使用this.value1ref.clear()
,但我这样做是为了证明一个观点,而且Picker没有clear()
。
答案 0 :(得分:1)
我认为你不应该使用refs。
您正在使用onChangeText
和onValueChange
中的回调正确更新状态,但您没有从状态渲染,因为您需要将value
道具添加到{{ 1}}你已经使用TextInput
作为选择器,因此行为不同(虽然道具中使用的值可能是错误的。)
selectedValue
和
<TextInput
onChangeText={(text) => this.setState({value1:text})}
value={this.state.value1}
/>
使用该套装,您只需在onSubmit中使用此功能。
<Picker
selectedValue={this.state.value2}
onValueChange={(itemValue) => this.setState({value2: itemValue})}
>
{/* ... */}
</Picker>