当前位置: 首页 > 知识库问答 >
问题:

react.js - react-native/nativebase密码类型的输入框在ios输入卡顿?

南宫兴德
2023-11-20

nativebase input输入框type设置为password时,在ios输入卡顿,android没有问题。
(react-native的textinput secureTextEntry属性设置为true时同样的问题)
步骤1:聚焦输入框,输入“123”,失去焦点
步骤2:再聚焦到输入框,再输入4,会把“123”顶掉只剩4,或者顶掉“3”剩“124”

const [pwd, setPwd] = useState({    oldPwd: '',    newPwd: '',    newPwd2: '',    showOldPwd: false,    showNewPwd: false,  }); <TextInput    value={pwd.oldPwd}    secureTextEntry={true}    onChangeText={text => {      setPwd({...pwd, oldPwd: text}), console.log(pwd);    }}  />  <Input    placeholder={t('旧密码')}    value={pwd.oldPwd}    type={pwd.showPwd ? 'text' : 'password'}    onChangeText={text => {      setPwd({...pwd, oldPwd: text}), console.log(pwd);    }}  />

共有1个答案

鞠侯林
2023-11-20

这个问题可能是由于 React Native 或 NativeBase 的输入法处理机制与 iOS 的原生输入法处理机制之间的冲突导致的。

一个可能的解决方案是使用第三方库,如 react-native-keyboard-aware-text-input。这个库可以帮助你更好地控制输入法,可能可以解决你的问题。

另一种可能的解决方案是自定义一个 TextInput 组件,并使用 onChangeText 回调来更新密码值。这样,你可以更好地控制输入框的值,避免出现卡顿问题。

如果你正在使用 React Native 0.60 或更高版本,你可以尝试使用 useEffect 钩子来更新密码值。例如:

import React, { useState, useEffect } from 'react';import { TextInput } from 'react-native';const PasswordInput = ({ secureTextEntry }) => {  const [value, setValue] = useState('');  useEffect(() => {    const interval = setInterval(() => {      if (value.includes('*')) {        setValue(value.replace(/[*]/g, ''));      } else {        setValue(value + '*');      }    }, 1000);    return () => clearInterval(interval);  }, [value]);  return (    <TextInput      value={value}      secureTextEntry={secureTextEntry}      onChangeText={text => setValue(text)}    />  );};

这个组件会在输入框中每秒钟插入一个星号,从而模拟密码输入的视觉效果。你可以在 NativeBase 的 Input 组件中使用这个组件,例如:

<Input placeholder="旧密码" secureTextEntry={true} />
 类似资料:
  • 介绍 带网格的输入框组件,可以用于输入密码、短信验证码等场景,通常与数字键盘组件配合使用。 引入 import { createApp } from 'vue'; import { PasswordInput, NumberKeyboard } from 'vant'; const app = createApp(); app.use(PasswordInput); app.use(Number

  • import { Pwdinput } from 'feui'; components: { [Pwdinput.name]: Pwdinput }, data() { return { value: '', showKeyboard: true } } 代码演示 基础用法 <fe-pwdinput :value="value" info="密码为

  • 使用指南 组件介绍 带网格的输入框组件,可以用于输入密码、支付密码等,可与数字键盘组件配合使用 引入方式 import { PasswordInput } from 'feart'; components: { "fe-password-input": PasswordInput, }, 代码演示 基本用法 <fe-password-input @change="onChange"

  • 我已经在Android中生成了以下公钥。 我选择的RSA密钥大小是4096字节,指数是3字节,模数是512字节 模数字节数组如下所示: [-32, -28, -121, 32, 109, -82, 43, 115, 43, -117, 20, 35, 122, 33, -2, 23, 23, -22, 75, 0, 91, 10, -89, 48, 33, -89, 57, 1, 57, -13,

  • 请输入主密码来加密保存在注册表里的密码记录,并保护它们免遭未经授权的访问。此后,您会需要在密码提示框里输入主密码来访问这些密码。一旦输入完毕,主密码在关闭 WinRAR 之前始终有效。如果您希望看到它是如何保护的,请在指定主密码后关闭 WinRAR 并重新打开它。输入空密码来从先前保护的密码记录里删除加密。 仅当您在上级“管理密码”对话框里按下“确认”后,实际的加密才执行,而不是在您关闭此主密码提

  • 在此对话框,您可以输入默认的密码,这可应用在添加、解压、测试和查看选项时。 如果“显示密码”选项被禁用并且压缩文档操作时需要密码,您将会被要求输入密码两次来进行正确性的确认。 如果您设置了“加密文件名选项”,WinRAR 不只加密数据,而且加密所有包括文件数据、文件名、大小、属性、注释和其它块等所有可感知的压缩文件区域,所以它提供了更高的安全等级。在压缩文件中使用这个命令加密,没有密码甚至不可能查