2017-11-12 4 views
1

私は、TextInput、Picker、およびTouchableHiglightを持つフォームを持っています。setNativePropsでpicker(Dropdown)selectedValueをリセット/変更する

ユーザーはTextInputに何かを入力し、Pickerからアイテムを選択してTouchableHighlightで送信します。

refを使用してTextInputをリセットすることはできますが、Picker値をデフォルトに変更またはリセットする方法はわかりません。

Possible Unhandled Promise Rejection
TypeError: this.value2ref.setNativeProps is not a function

反応するネイティブ私もこのタイプの参照ではなく無駄にしようとした

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()を使用することができます知っているが、私はそれをポイントを証明するために、この方法をやっているし、また、ピッカーのためのclear()はありません。

答えて

1

私はあなたがそれについての参考文献を使用しているとは思わないと思います。

あなたは正しくonChangeTextonValueChangeにコールバックして状態を更新しているが、あなたはあなたがすでに異なるので、ピッカーのためselectedValueを使用していたTextInputvalue小道具を追加する必要があるため、状態からレンダリングされていません(小道具で使われていた値はおそらく間違ったものでした)。

<TextInput 
    onChangeText={(text) => this.setState({value1:text})} 
    value={this.state.value1} 
/> 

<Picker 
    selectedValue={this.state.value2} 
    onValueChange={(itemValue) => this.setState({value2: itemValue})} 
    > 
    {/* ... */} 
</Picker> 

あなたは自分をonSubmitでこれを必要とするセットで。

onSubmit() { 
    this.setState({value1: '', value2: ''}); 
} 
+0

私は州で遊んでみましたが、それだけでは機能していないので別の方法を探しました。私はあなたが 'this.setState({value1: ''});'の代わりに 'this.state.value1 = '';まあ、これは恥ずかしいです。それをクリアしていただきありがとうございます!たぶん今夜はピッカ/ドロップダウンの悪夢を使わずに寝ることができます。 –

関連する問題