javascript - 逐步聚焦 TextInput 反应原生
问题描述
我目前正在为反应原生应用程序创建一个 4 位 otp(一次性密码)视图,当我在前一个输入上键入数字时,我需要 TextInput 逐步聚焦。
我已经能够改变样式(没有焦点),但焦点不会随之改变,当我输入另一个数字时,应用程序崩溃。
我希望这样当我在第一个输入上输入时,焦点移动到下一个 TextInput 等等,在最后一个输入上,它专注于提交。
我该怎么做?
下面是我的代码
组件
import React, { useState, useEffect } from 'react';
import { StyleSheet, Text, ScrollView, View, Alert, Image } from 'react-native';
import { SimpleLinearGradientButton } from '../../components/Buttons';
import { SimpleCard } from '../../components/Cards';
export default function(props) {
const [otp, setOtp] = useState([]);
const [isFocused, setIsFocused] = useState({ focused: true, index: 0 });
const inputs = Array(4).fill(0);
function renderInputs() {
return inputs.map((input, index) => {
return (
<TextInput
style={
isFocused.focused && index === isFocused.index
? styles.inputFieldsFocused
: styles.inputFields
}
key={index}
keyboardType={'numeric'}
onChange={focus}
></TextInput>
);
});
}
function focus(e) {
setOtp(otp.concat(this.value));
setIsFocused({ focused: true, index: isFocused.index + 1 });
isFocused.index ? e.focus() : null;
}
return (
<ScrollView contentContainerStyle={styles.content}>
<View>
<Image
style={styles.image}
source={require('../../../assets/images/verification.png')}
/>
</View>
<View>
<Text>Verification</Text>
<Text>
Enter the 4 digit sent to your email address
</Text>
</View>
<View>
<SimpleCard>
<>{renderInputs()}</>
</SimpleCard>
<SimpleLinearGradientButton
title="Submit"
/>
</View>
</ScrollView>
);
}
焦点功能旨在将下一个输入集中在该索引上,但这似乎不起作用,但样式会发生变化。我该怎么做?谢谢
解决方案
我建议使用单个hidden ,并根据输入的值TextInput
在 simple -s 中呈现数字。View
我认为没有理由对 4 位代码有不同的输入。
但是,如果您需要使用不同的输入,则必须以命令的方式(使用refs)控制它们的焦点状态。见focus()
方法。这种方法也有一些错误(https://github.com/facebook/react-native/issues/19366)
请参阅此处的文档https://facebook.github.io/react-native/docs/textinput
推荐阅读
- jquery - 如何在数据属性 jquery 上转义单引号
- boost - CMake 的 find_package 仅包含标头库
- reactjs - 使用函数获取 API 数据并填充提供程序
- php - 如何创建包含上传图像的 Slack 消息?
- ios - 添加依赖后 Flutter 构建失败
- javascript - 为什么我的 var 为 null 并且代码不起作用
- c# - 从具有重复数据的 SQL 结果创建键值对
- c - 错误:编译 stdlib.h 时的未知类型名称“__float128”
- c++ - 仅使用 regex_search 返回第一个匹配项
- c# - 如何告诉编译器将 wwwroot 从一个项目复制到测试项目?