【问题标题】:How would I replace string in TextInput in react-native如何在 react-native 中替换 TextInput 中的字符串
【发布时间】:2019-08-11 14:16:47
【问题描述】:

我是 Stackoverflow 的新手。我想知道如何在 TextInput 中输入字符串时替换它。因为我不能(即使没有root/越狱也是可能的)更改设备的键盘语言,所以我想在输入时更改键码(unicode)。基本上将'w'更改为'pension'。这是基本思想。

我已经创建了一个 JSON 对象,其中包含我想要的一些键。假设是这样的。 json = {"w" = "އ"}。以下是我到目前为止的完整代码(抱歉,这是有史以来最笨拙的代码):


const KeyCodes = { "q": "ް", "w": "އ", "e": "ެ", "r": "ރ", "t": "ތ", "y": "ޔ" };

<TextInput
                    style={styles.nameInput}
                    onChangeText={(nameInput) => this.setState({nameInput})}
                    value={this.state.nameInput}
                    //Here is where all hell breaks loose
                    onKeyPress={({ nativeEvent }) => {
                        nativeEvent.key in KeyCodes ? this.setState({ nameInput: KeyCodes.q }) : null
                    }}
                />

预期的行为是每次用户输入时,我希望从KeyCodes 获取并检查键值,如果该键存在,则将该键值从 json 替换为 TextInput。我知道这不是一个功能,但这只是一个测试,我不知道如何从这里继续。也许将它移入一个函数并调用该函数等等。我坚持的是,我如何将值替换为 KeyCodes 实际值到状态或一般的 InputField 中。现在它替换了已经存在的文本。并且替换有一个小的延迟,因此在被替换为“އ”之前会显示“w”。所以基本上回顾一下,无论我按下什么键,键值都将与 json 对象进行交叉检查,如果存在,则取其值并将其替换为按下到 TextInput 中的键。对不起,如果这太长了,希望这是足够的信息。对于任何想知道的人来说,这是“Thaana”,即“Dhivehi”语言。

【问题讨论】:

    标签: javascript react-native


    【解决方案1】:

    您需要检查输入的最后一位数字并将其转换为所需的值,然后将其与字符串的其余部分连接。

     <TextInput
          value={this.state.nameInput}
          onKeyPress={({ nativeEvent }) => {
             if (nativeEvent.key === 'Backspace') {
                this.setState({nameInput:this.state.nameInput.slice(0, -1)})
           }}}
          onChangeText={text => {
            const lastDigit = text[text.length - 1];
            this.setState({
              nameInput: this.state.nameInput.concat(
                //checking if it is in your JSON
                KeyCodes[lastDigit] ? KeyCodes[lastDigit] : ''
              ),
            });
          }}
        />
    

    【讨论】:

    • 这可行,但有两个问题。首先,更改文本仍然需要半秒钟。应该是这样吗?我的意思是如果不实际显示输入的文本就不可能立即更改吗?其次,退格/删除不起作用。我认为这是由于 concat?它不会让我投票,但感谢这一点:)
    • 第二个我编辑了我的答案,所以我们可以手动退格
    • 这行得通。而对于空间,我刚刚做了" ":" ",它的字面意思是空间新闻是一个空间。所以你的意思是当我输入yes时它仍然会出现?我的意思是转换。非常感谢!
    • 参考请找到这个。这是当前的实现以及它在开发环境中的样子:ibb.co/0c3cJFy
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2016-06-05
    相关资源
    最近更新 更多