我如何同步regexp测试验证和渲染,因为看起来,例如,如果验证regexp允许5个字符,当我在输入字段中已经有6个字符时,它将变为真,在我看来,它与渲染状态有关。
用户名状态:
const [username, setUsername] = useState({
name: "",
isValid: false,
});
处理用户名函数:
function handleUsername(e) {
const regexp = new RegExp(/[a-zA-Z][a-zA-Z0-9-_]{5,32}/gi);
const isValid = regexp.test(username.name);
setUsername(() => {
return {
name: e,
isValid: isValid ? true : false,
};
});
console.log("isValid - ",
isValid,
"|",
"username.name.length - ",
username.name.length); // => isValid - false | username.name.length - 5
}
在函数外运行console.log:
console.log(
"username.name.length - ",
username.name.length); // => username.name.length - 6
我试图弄清楚为什么会发生这种情况,但结果却是更多的困惑。
1条答案
按热度按时间omqzjyyz1#
setState是异步的,所以你是console.logging陈旧的状态。
使用定义新状态的变量,或者使用console.log将其记录在具有用户名依赖项的useEffect中