2017-04-05 10 views
5

編集:これ以上調べると、これはAndroid 6.0.1でのみ発生するようです。 6.0でいくつかのデバイスを試したところ、これは問題ではありませんでした。ネイティブテキストの入力に反応しないクリアテキストがクリアされない

私はTextInputのテキストを消去したい非常に単純なReactネイティブコードスニペットを持っています。それは少しのようになります。これは焦点のテキスト入力を離れて、テキストをクリアするために、私は期待

state = { 
    v: "" 
}; 

_changeText = v => { 
    this.setState({ v }); 
}; 

clear =() => { 
    this.textInputRef.clear(); 
} 

render() { 
    return (
    <View style={styles.container}> 
     <TouchableOpacity onPress={this.clear}> 
     <Text> Clear </Text> 
     </TouchableOpacity> 
     <TextInput 
     ref={ref => this.textInputRef = ref} 
     value={this.state.v} 
     onChangeText={this._changeText} 
     /> 

    </View> 
); 
} 

今行動があります。これは起こりますが、キーボードで何かを入力すると、以前クリアしたテキストがテキスト入力に再び表示されます。明らかに、このようなテキストの永続性は本当に望ましくありません。

この問題が発生したことがありますか?それはRNバグですか、キーボードをぼかす必要なくこの動作を回避する方法はありますか?

ここでは、私が意味することを明確にするための少しスニペットがあります:https://snack.expo.io/H1S9b5Mpe

入力を開始したら、クリアを押してから入力を続けると、以前に表示されたテキストが新しく入力されたテキストの前に表示されます。

+0

状態をクリアしましたか? –

+1

この問題の回避策は次のとおりです。http://stackoverflow.com/questions/37798584/react-native-when-submitting-a-text-input-in-android-the-word-suggestions-are –

+0

回避策動作します。明らかに理想的ではありませんが、問題のあるデバイスにのみ適用しています。 –

答えて

0

特定のRNバージョン、または特定のOSバージョンに関連する可能性があります。あなたが本当にうまく動作しているスニペットは、6.0.0でこの問題を再現することはできません。 this.setState({v: ""});

はたぶん代わりにTextInputclear方法を使用しての、あなたはそうのようなテキストをクリアする別の方法を試すことができます。これは、状態が同期しており、以前の値を保持しないことを保証します。

+0

残念ながら、setStateではまったく同じことが起こります。 6.0.1を実行している一部のデバイスでのみ再現できるという点で、非常に奇妙な問題です。また、7.0を実行するデバイスで再現することもできます。 –

0

私はちょうどこれで苦労し終わりました!それは深刻な痛みです!私は(今のところ)この問題を解決するためにやった

は、falseにするTextInputのオートコレクトの小道具を設定し、これは

<TextInput 
    autoCorrect={false} 
    ref={component => this.messageInput = component} 
    value={this.state.message} 
    onChangeText={(text) => this.setState({ message: text })} 
    placeholder="Type your message here..." /> 

を「状態を維持」からキーボードを防ぐように、私が他のすべてをしようとしたようですこれがうまくいったようです。より良い解決策を楽しみにしています!

BTW:入力の値が空の文字列にリセットされるようにthis.setState({ message: "" })も行う必要があります。

関連する問題