如何在本机反应中关注下一个字段输入?

Posted

技术标签:

【中文标题】如何在本机反应中关注下一个字段输入?【英文标题】:How focus the next field input in react native? 【发布时间】:2017-09-15 15:24:21 【问题描述】:

我需要在 android 平台上关注 react native 中的下一个字段输入。 但是focus()函数,在android react native中是没有的,只有ios才有。

这是怎么做的?我使用 react native 和 typescript。

【问题讨论】:

你尝试了什么,请贴出你的代码sn-ps React Native: How to select the next TextInput after pressing the "next" keyboard button?的可能重复 【参考方案1】:

焦点功能很好用。

<View style=flexDirection: 'row'>
        <Text style=flex: 1>Enter Name: </Text>
        <TextInput ref="name" onChangeText=(name) => this.setState(name) style=flex: 1
          onSubmitEditing=() => this.refs.age.focus()/>
      </View>
      <View style=flexDirection: 'row'>
        <Text style=flex: 1>Enter Age: </Text>
        <TextInput ref="age" keyboardType="numeric" onChangeText=(age) => this.setState(age) style=flex: 1
          onSubmitEditing=() => this.refs.sport.focus()/>
      </View>
      <View style=flexDirection: 'row'>
        <Text style=flex: 1>Enter Favourite Sport: </Text>
        <TextInput ref="sport" onChangeText=(sport) => this.setState(sport) style=flex: 1/>
      </View>

希望这会有所帮助。这是安卓版的。

【讨论】:

【参考方案2】:

您必须在您想要关注的输入上进行用户引用:

<Input
   ref=(node) =>  this.myInput = node 
   value=this.state.myInput.toString()
   onSubmitEditing=() =>  this.myOtherInput.focus() />
<Input
   ref=(node) =>  this.myOtherInput = node 
   value=this.state.myOtherInput.toString()/>

您可以看到,当您提交对第一个输入的编辑时,您将专注于第二个输入。您可以在任何地方使用 this.MY_CUSTOM_REF.focus()。

【讨论】:

如何在基于打字稿的项目中使用此代码?!【参考方案3】:

这对我有用:

<Input
  blurOnSubmit=false
  returnKeyType="next"
  onSubmitEditing=() => 
    this.passwordInput.wrappedInstance.focus();
  
/>
<Input
  secureTextEntry
  ref=(input) => 
    this.passwordInput = input;
  
/>

【讨论】:

【参考方案4】:

我将函数插入到自定义组件中。

public focus()
 this.input.focus()

【讨论】:

完全没有必要创建新方法。【参考方案5】:

看看这篇文章,这可能会很方便react-native inputs

//Helper function   
focusNextField(nextField) 
    this.refs[nextField].focus();


<TextInput
    ref='1'
    style=styles.otpInputStyle
    keyboardType='numeric'
    secureTextEntry
    value=this.props.otp1
    maxLength=1
    onChangeText=(num) => 
        this.props.otpCode1(num);  //action call
        if (num && num.length === 1) 
           this.focusNextField('2'); //function call. '2' ref to next input ref
         
    
/>

【讨论】:

【参考方案6】:
import React,  useRef  from 'react';

...

export default function YourFuctionalComponent() 
    const input1 = useRef(null);
    const imput2 = useRef(null);
    const doSomething = () => 

    return(
        <>
             <TextInput
                autoFocus
                ref=input1
                onSubmitEditing=() =>  imput2.current.focus(); 
                returnKeyType="next"
             />
             <TextInput
                ref=input2
                onSubmitEditing=() => doSomething()
                returnKeyType="done"
             />
        </>
    );

https://i.stack.imgur.com/W6dvs.gif

【讨论】:

希望它能解决问题,但请添加对代码的解释,以便用户完全理解他/她真正想要的。 在我看来这里一切都清楚了,第一个onSubmitEditing 调用第二个输入的焦点函数,第二个onSubmitEditing 做了一些事情。这适用于功能组件。

以上是关于如何在本机反应中关注下一个字段输入?的主要内容,如果未能解决你的问题,请参考以下文章

如何在本机反应中关闭系统键盘

发出警报后,我无法在我的反应本机应用程序中关闭我的键盘

如何在本机反应中从 json 获取数据?

如何更改输入反应本机的值

在提交时清除所有 textInput 字段反应本机

如何在本机反应中验证 TextInput 值?