2017-04-05 78 views
5

编辑:进一步检查后,似乎这只发生在Android 6.0.1。在使用6.0的几款设备上尝试过,这不是问题。反应本机文本输入清除不清除文本

我有一个非常简单的React Native代码片段,我想要清除TextInput中的文本。它看起来有点像这样:

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版本有关,或者与您发现的特定操作系统版本相关。您确实的代码片段工作得很好,无法在6.0.0上重现此问题。

也许而是采用TextInputclear方法,你可以尝试用不同的方式来清除文本,像这样: this.setState({v: ""});。它将确保状态保持同步并且不会保持先前的值。

+0

不幸的是,setState发生了同样的事情。这似乎是一个很奇怪的问题,我们只能在运行6.0.1的某些设备上重现它。我们也可以在运行7.0的设备上重现它。 –

0

我刚刚完成了这个挣扎!这是一个严重的痛苦!

我做了什么来解决这个(现在),成立了TextInput假的自动更正道具,好像这样可以防止键盘从“保持状态”我尝试了一切

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

看起来这是有效的。期待更好的解决方案!

顺便说一句:你也应该做this.setState({ message: "" }),以便输入值重置为空字符串。