如何在react-native文本输入中获取新键入的文本?

时间:2017-08-25 18:29:51

标签: javascript text react-native onchange textinput

当用户在TextInput中输入文字时,会调用onChangeTextonChange

  • 我从event回调中获得onChange,可以从event.nativeEvent.text获取最新更新的文字。

  • 我从text回调中获得onChangeText,可以从中获取最新更新的文字。

但我只想要新输入的文字/字母。怎么弄这个?

例如: - 我们假设我们在som中有TextInput作为文字,现在只要用户输入e,我只需要 e 而不是全文some

有什么解决方法吗?

3 个答案:

答案 0 :(得分:0)

要仅获取新输入的文本,您可以使用TextInput的 onChange 功能,如下所示: -

 <TextInput  
    onChange={(event) => {console.log(event.nativeEvent.data)}}
    onChangeText={(val) => {console.warn(val)}}
 />

如上所述,onChangeText将为您提供完整的文本,但您可以使用onChange中的事件来获取新的字母。

修改

根据您的本机新版本,您可以在 event.nativeEvent.text 中获得完整的新文字,而在 event.nativeEvent.data 中则无法获取数据。因此,根据您的要求,您现在可以使用以下代码: -

                <TextInput 
                onChange={(evnt)=>{
                        let newText = [];
                        let oldText = [];

                    for(let i=0;i<evnt.nativeEvent.text.length;i++) {
                        newText.push(evnt.nativeEvent.text[i]);
                        if(this.state.val[i]) {
                            oldText.push(this.state.val[i]);                                
                        }
                    }
                    let newLetter = '';
                    for(let j=0;j<newText.length;j++) {
                        if(newText[j] !== oldText[j]) {
                            newLetter = newText[j];
                            break;
                        }
                    }
                    console.log(newLetter);
                }}
                onChangeText={(val)=>{
                    console.log(val);
                    this.setState({val});
                }}
            />

您将在 newLetter 的控制台中获得新输入的字母。如果我找到与此相关的任何其他内容,我会告诉您,但现在您可以使用此方法:)

答案 1 :(得分:0)

在纯js中解决此问题的一种方法是使用字符串

来尝试
getNewChar(str){
  return str[str.length - 1];
}

答案 2 :(得分:0)

我们可以通过

获取新输入的字母

onSelectionChange中使用Input道具。我们可以从event获得onSelectionChange,我们可以从cursor获得cursor位置。通过 <Input ... onChangeText={this.handleMessageChange} onSelectionChange={this.handleMessageSelectionChange} ... /> 位置和全文,我们可以轻松获得新输入的字母

实施例: -

handleMessageChange = (message: string) => {
    this.setState({ message });
  };

handleMessageSelectionChange = (event: Object) => {
    const { selection } = event.nativeEvent;
    this.setState({ selection });
  };

方法

getNewlyEnteredLetters = (): string => {
        const { selection, message } = state;
        const { start, end } = selection;
        return start === end ? message[start -1 ] : message[message.length - 1] 
      }; // start === end implies that new letters are entered and not selection is made.

现在,无论何时您想要新输入的字母,都可以获得

<script>
    $.ajax({
        url:url, /* ./ajax/data.json */
        type:'post',
        dataType:'text', /* text,html,json,jsonp */
        /*contentType: 'application/json',*/
        async:true,
        success: function(data){
            console.log(arguments);
            alert('success');
        },
        error: function(){
            alert('failed');
        }
    });
</script>