两次退格键上可能的 Android 自动完成错误(更改值以包含前一个单词)

Noi*_*art 5 android react-native

这可能只是一个 Android 6.0 错误。我在 Android 5.1.1 和 Android 7.0 中测试了下面的小吃,但没有发生。

每当用户键入“@”时,我都会尝试自动完成。我成功地做到了这一点,但是一旦我退格几次,本机端的值就变成了我以前从未有过的值。我已将案例简化为以下代码:

请尝试这里的小吃 - https://snack.expo.io/@noitsnack/what-the-heck---autocomplete-then-backspace-bug 或将代码复制并粘贴到新react-native init项目中。我在 RN 0.51 和 RN 0.54 中进行了测试。

  1. 请然后输入 Hi @
  2. 您将看到它自动完成为Hi @foobar.
  3. 然后退格一次,现在正确了Hi @fooba
  4. 再次退格,现在是Hi @foHi(这是错误,应该是Hi @foob

这是一个受控输入。我不知道为什么它会变成Hi @foHi第二个退格。如果我模糊然后在第 3 步之后它不会回来。

我在另外两个设备上试过,Android 7.0 和 Android 5.1.1,没有这个错误。它只发生在我的 Android 6.0 上。我认为这是一个依赖于操作系统的错误。有没有人对实际发生的事情有想法?这将帮助我了解如何在所有设备上解决此问题。

这真的是 RN 方面的错误吗?

我在此处以高清格式录制了此行为的截屏视频:

https://gfycat.com/RectangularAltruisticEuropeanfiresalamander

这是一个GIF:

动画片

代码(复制自世博小吃):

import React, { Component } from 'react';
import { StyleSheet, Text, View, TextInput } from 'react-native'

class FieldMentionable extends Component<Props, State> {
    state = {
        value: ''
    }

    render() {
        const { value } = this.state;

        return <TextInput onChange={this.handleChange} value={value} multiline />
    }

    handleChange = ({ nativeEvent:{ text }}) => {
        const { value } = this.state;

        if (text.endsWith(' @')) this.setState(() => ({ value:text + 'foobar' }));
        else this.setState(() => ({ value:text }));
    }

    handleRef = el => this.input = el;
}


export default class App extends Component {
    render() {
        return (
            <View style={styles.container}>
                <FieldMentionable />
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        paddingHorizontal: 100,
        backgroundColor: '#F5FCFF',
    }
});
Run Code Online (Sandbox Code Playgroud)

Noi*_*art 0

这是一个错误,其根本问题已在此处提交 - https://github.com/facebook/react-native/issues/19085