reactjs - React :总是考虑之前的状态 id,即使使用 prevState 和 useEffect
问题描述
我有一个检查密码长度的 checkPassword 函数,该函数在输入我的密码时触发“onChange”。
这是功能:
const checkPassword = () => {
if (user_password.length >= 10)
setPasswordFlag({ ...passwordFlag, length: true });
else setPasswordFlag({ ...passwordFlag, length: false });
};
这是我的密码输入:
<input type="password" className="input_container" placeholder="Mot de passe" id="password" name="password" onChange={(e) => {
setUserSignup({
...userSignup,
user_password: e.target.value,
});
checkPassword();
}}
value={userSignup.user_password} ref={refSignupPassword} />
问题是每次都考虑到之前的状态。基本上我的状态 passwordFlag.length 在第 11 个字符而不是第 10 个字符处更改为 true。
我尝试使用 prevState,但它并没有改变任何东西。
然后,我尝试像这样使用 useEffect :
const checkPassword = () => {
useEffect(() => {
if (user_password.length >= 10)
setPasswordFlag({ ...passwordFlag, length: true });
else setPasswordFlag({ ...passwordFlag, length: false });
}, []);
};
但是我现在有这个错误:在函数“checkPassword”中调用了 React Hook “useEffect”,该函数既不是 React 函数组件也不是自定义 React Hook 函数。React 组件名称必须以大写字母开头。我试图用大写重命名我的函数,但同样的问题。
但是,如果我将 checkPassword 函数放在 onBlur={checkPassword} 中,那么它可以工作。但我需要在“onChange”而不是“onBlur”中修复它
有人能告诉我我需要做什么来确保考虑到正确的状态吗?
谢谢 !
解决方案
您不能在函数块内使用“useEffect”。
您可以像这样更改您的功能:
const checkPassword = (password) => {
if (password.length >= 10)
setPasswordFlag({ ...passwordFlag, length: true });
else setPasswordFlag({ ...passwordFlag, length: false });
};
和你的密码输入:
<input type="password" className="input_container" placeholder="Mot de passe" id="password" name="password" onChange={(e) => {
setUserSignup({
...userSignup,
user_password: e.target.value,
});
checkPassword(e.target.value);
}}
value={userSignup.user_password} ref={refSignupPassword} />
我们将值传递给 checkPassword 函数。现在您的函数可以立即访问密码长度。
推荐阅读
- swift - 华氏到摄氏转换和打印问题
- javascript - 如何避免其他选项卡中的数据在当前选项卡中可见
- react-native - 反应原生 EXPO / 在安装草图 npm 时都显示 RNSketch 错误
- python - 如何以交互方式将 XML 文件可视化为 python 中的树?
- django - Django - 在模型中使用 Reverse 的动态 URL 重定向问题
- javascript - 在使用 jquery 固定的位置上单击导航
- ruby - 如何使用 AWS Ruby SDK 从具有特定名称且超过 n 天的各种子文件夹的 S3 文件夹中删除所有对象
- android - 保存图像时,图像会旋转 90 度。使用 CameraX
- reactjs - 使用reactjs处理付款时如何禁用条带付款按钮?
- linux - 为什么在命令行选项中设置 IGNORECASE awk 变量的值时不能正常工作?