如何在按下“下一个”时将焦点聚焦到下一个无状态输入框

41 浏览
0 Comments

如何在按下“下一个”时将焦点聚焦到下一个无状态输入框

我正在使用React Native开发一个应用。在我的登录页面上,我有一个带有Redux的表单。我想在输入电子邮件后,点击"下一步"后将焦点放在密码输入框上。

我尝试在renderInput()中的Input上使用onSubmitEditing,结合访问refs,但可惜没有成功(因为元素是无状态的,所以无法使用refs)。

我的代码:

class LoginForm extends React.Component {
    textInput: any;
    constructor(props) {
        super(props);
        this.state = {
            email: '',
            password: '',
            isLoading: false,
        }
    }
    renderInput({ input, disabled, label, type, meta: { touched, error, warning } }) {
        return (
            
                
                 (this.textInput = c)}
                    placeholder={input.name === "email" ? "电子邮件" : "密码"}
                    secureTextEntry={input.name === "password"}
                    editable={!disabled}
                    // autoFocus={input.name === "email"}
                    returnKeyType={input.name === "email" ? "next" : "send"}
                    keyboardType={input.name === "email" ? "email-address" : "default"}
                    autoCapitalize="none"
                    blurOnSubmit={false}
                    {...input}
                />
            
        );
    }
    render() {
        const { isLoading } = this.state;
        const form = (
            
this.setState({email: value})} /> this.setState({password: value})} /> {isLoading && ( )} ); return ; } } const LoginContainer = reduxForm({ form: "login", })(LoginForm); export default LoginContainer;

0
0 Comments

问题的原因是当用户按下“下一步”键时,下一个无状态输入框无法获得焦点。解决方法是使用TextInput,并使用onSubmitEditing属性来设置下一个输入框获得焦点的函数,并使用KeyboardAvoidingView来避免键盘遮挡输入框。如果使用Redux Form,则需要添加blurOnSubmit={false}属性来避免键盘的跳动。

0