密码验证器,使用挂钩,状态未更新,显示无错误

Password Validator , using hooks , states are not updating , Showing No error

Functions <-- 图片

在我的程序中状态没有改变

Function Code For Vallidation

    const checkPassword = (e) => {
    const password = e.target.value;
    Capital(password);
    Small(password);
    Numbers(password);
    Symbols(password);
    MinLen(password);
    console.log(ErrStatus.capital);
  };

这里我列出了所有变量 使用哪个

  const capital = new RegExp("[A-Z]");
  const small = new RegExp("[a-z]");
  const number = new RegExp("[0-9]");
  const symbols = new RegExp("[@$!%#?&]");
  const minLen = new RegExp("[A-Za-zd@$!%*#?&]{8,}$");

  const ErrArr = {
    capital: "One capital Letter required",
    small: "One small Letter required",
    number: "One number Letter required",
    symbol: "One symbol  required",
    minLen: "min 8 character required",
  };
  const [ErrStatus, setErrStatus] = useState({
    capital: true,
    small: true,
    number: true,
    symbol: true,
    minLen: true,
  });

全部功能参考图片 在我的代码中 'ErrStatus' 没有从我的函数(出现在图像中)更新

将状态拆分为个体

  const [caps, setCaps] = useState(true);
  const [small, setSmall] = useState(true);
  const [number, setNumber] = useState(true);
  const [symbol, setSymbol] = useState(true);
  const [minLength, setMinLen] = useState(true);

有效

您的问题可能与异步 javascript 函数有关。下一个检查应该 运行 只有在上一个检查完成之后。

因此您的代码应如下所示:

async function Capital(password){
  ...
  await setErrStatus({...ErrStatus, capital: false})
}
async function Small(password){
  ...
  await setErrStatus({...ErrStatus, small: false})
}
async function Numbers(password){
  ...
  await setErrStatus({...ErrStatus, numbers: false})
}
async function Symbols(password){
  ...
  await setErrStatus({...ErrStatus, symbols: false})
}
async function MinLen(password){
  ...
  await setErrStatus({...ErrStatus, minLen: false})
}

所以你可以这样称呼它们:

const checkPassword = async (e) => {
  const password = e.target.value;
  await Capital(password);
  await Small(password);
  await Numbers(password);
  await Symbols(password);
  await MinLen(password);
  console.log(ErrStatus.capital);
};