reactjs onBlur没有按我想要的方式工作

v09wglhw  于 2023-01-25  发布在  React
关注(0)|答案(1)|浏览(124)

在这里我想这个onBlur显示另一个文本或输入字段,这是工作,但每当我清除的值,它应该隐藏,但现在它不是我想要的工作方式。在简单的话,每当我在输入字段中输入内容,并失去了焦点,它显示子输入字段,但每当清除它,它应该隐藏,但它是不是工作,这里的代码

<Typography
                color="#05445E"
                fontFamily="'Jost', sans-serif"
                fontSize={15}
              >
                Email
              </Typography>
              <Input
                fullWidth
                name="email"
                value={user.email}
                onChange={handleChange}
                disableUnderline={true}
                onBlur={handleOTP}
                className={classes.inputEmail}
                endAdornment={
                  <>
                    {user.clearEmail ? (
                      <IconButton
                        onClick={() => clearValue("email", "clearEmail")}
                      >
                        <ClearIcon />
                      </IconButton>
                    ) : (
                      ""
                    )}
                  </>
                }
              />
              {showSecondInput && (
                <>
                  <Typography
                    color="#05445E"
                    fontFamily="'Jost', sans-serif"
                    fontSize={15}
                    sx={{ mt: "15px" }}
                  >
                    Enter OTP
                  </Typography>
                  <Input
                    className={classes.inputEmail}
                    fullWidth
                    type="password"
                  />
                </>
              )}

这是我使用过的状态

const [user, update_user] = useState({
    user_name: "",
    email: "",
    clearUser: false,
    clearEmail: false,
  });
 

  const clearValue = (key, show) => {
    update_user({ ...user, [key]: "", [show]: false });
  };
  const [showSecondInput, setShowSecondInput] = useState(false);

  const handleOTP = (e) => {
    const { name:key } = e.target;

    if(key === "email") setShowSecondInput({ ...showSecondInput, [key]: "", clearEmail: false });
  };

  const handleChange = (event) => {
    const { name: key, value } = event.target;

    if (value) {
      if (key === "user_name")
        update_user({ ...user, [key]: value, clearUser: true });
      else if (key === "email")
        update_user({
          ...user,
          [key]: value,
          clearEmail: true,
        });
    } else
      update_user({
        ...user,
        [key]: "",
        clearUser: false,
        clearEmail: false,
      });
  };

clearValue函数运行平稳,没有任何问题,问题出在blur事件上。

uttx8gqw

uttx8gqw1#

如果你有更多的onBlur,你可以通过handleOTP函数检查name,然后检查value是否是空字符串,并根据它设置状态。

const handleOTP = (e) => {
  const { name, value } = e.target;

  if (name !== "email") return;

  if (value === "") {
    setShowSecondInput(true);
  } else {
    setShowSecondInput(false);
  }
};

相关问题