javascript - 如何停止 React 中条件 JSX 的更改,直到再次单击提交?

标签 javascript reactjs frontend mern

解释它有点棘手,这就是我记录下发生的事情的原因。 enter image description here

如您所见,一旦我输入了错误的答案,然后再次使用输入字段,我就会收到正确的消息,而无需点击提交。我知道根据我编写的代码应该会发生这种情况,但我找不到正确的方法。

这是我的代码:

const AdditionMain = () => {
  const [sum, setSum] = useState("");

  const [isSubmit, setIsSubmit] = useState(false);
  const [disabled, setDisabled] = useState(false);
  const randomNum1 = () => {
    let number1 = Math.floor(Math.random() * 50);

    return number1;
  };
  const randomNum2 = () => {
    let number2 = Math.floor(Math.random() * 50);
    return number2;
  };
  const number1 = useMemo(() => randomNum1(), []);
  const number2 = useMemo(() => randomNum2(), []);
  const result = number1 + number2;

  const correctAnswer = <Typography>Correct!</Typography>;
  const wrongAnswer = <Typography>Wrong!</Typography>;
  const enterAnswer = <Typography>Enter your answer!</Typography>;

  const onSubmit = (e) => {
    e.preventDefault();

    setIsSubmit((prevState) => !prevState);
    if (sum === result) {
      setDisabled(!disabled);
    }
  };

  return (
    <>
      <Navbar />
      <Card
        sx={{
          marginTop: 2,
          height: 50,
          display: "flex",
          flexDirection: "column",
          alignItems: "center",
        }}
      >
        <Typography></Typography>
      </Card>
      <Container component="main" maxWidth="xs">
        <Box
          sx={{
            marginTop: 8,
            display: "flex",
            flexDirection: "column",
            alignItems: "center",
          }}
        >
          <Typography>Fill in the box to make the equation true.</Typography>
          <Typography fontSize={28}>
            {number1} + {number2} =
          </Typography>

          <TextField
            inputProps={{ inputMode: "numeric", pattern: "[0-9]*" }}
            onChange={(e) => setSum(parseInt(e.target.value))}
            disabled={disabled}
            type="number"
            value={sum}
            name="sum"
            id="outlined-basic"
            label=""
            variant="outlined"
          ></TextField>

          {!isSubmit || (isSubmit && sum === "") ? (
            <Button onClick={onSubmit} sx={{ marginTop: 1 }} variant="outlined">
              Submit
            </Button>
          ) : isSubmit && sum !== result ? (
            <Button onClick={onSubmit} sx={{ marginTop: 1 }} variant="outlined">
              {" "}
              Try again!
            </Button>
          ) : (
            () => {}
          )}

          {isSubmit && sum === ""
            ? enterAnswer
            : isSubmit && sum !== result
            ? wrongAnswer
            : isSubmit && sum === result
            ? correctAnswer
            : ""}
          {isSubmit && sum === result ? <Button>Try new one</Button> : () => {}}
        </Box>
      </Container>
    </>
  );
};

export default AdditionMain;

最佳答案

使用输入字段时,只需在 onChange 中调用 setIsSubmit(false)isSubmit 的值设置为 false TextField 的 code> 方法如下所示

 ...
      <TextField
        inputProps={{ inputMode: "numeric", pattern: "[0-9]*" }}
        onChange={(e) => {
                    setSum(parseInt(e.target.value));
                    setIsSubmit(false)
                 }}
        disabled={disabled}
        type="number"
        value={sum}
        name="sum"
        id="outlined-basic"
        label=""
        variant="outlined"
      ></TextField>
...

关于javascript - 如何停止 React 中条件 JSX 的更改,直到再次单击提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75079573/

相关文章:

javascript - 在html5中将图像颜色更改为灰度

css - 是什么导致 Safari 上的语义 UI 组件随机突出显示?

reactjs - Redux reducer - 使用 forEach 修改数组

angularjs - Node jS API 和 Angular jS 应该在同一个项目中吗?

javascript - &lt;!doctype html> 强制代码无法正确显示

javascript - 即使刷新后也能保留所写笔记的记事本

javascript - 使用node.js和express.js的图片显示错误

javascript - Chrome 调试器悬停在变量上不会弹出变量详细信息

javascript - 去掉 while(1) 前置到 JSON 对象

Javascript:带有 bool 值和字符串比较的 If 语句给出了意想不到的结果