【问题标题】:How reset form values using react bootstrap如何使用 react bootstrap 重置表单值
【发布时间】:2022-01-15 17:58:29
【问题描述】:

点击注册按钮后我的目标是:

  • 将输入字段设为空白
  • 不显示错误工具提示

这是 CodeSandbox

上的 link

我已经尝试使用 event.target.reset(); 但是工具提示仍然出现在屏幕上。

export default function App() {
  const [showSucessAlert, setshowSucessAlert] = useState(false);
  const [validated, setValidated] = useState(false);
  const [transitionAlert, setTransitionAlert] = useState(false);

  const handleSubmit = (event) => {
    const form = event.currentTarget;
    event.preventDefault();

    if (form.checkValidity() === false) {
      event.stopPropagation();
    } else {
      handleClickTransitionAlert();
      setshowSucessAlert(true);
    }
    setValidated(true);
  };

  const handleClickTransitionAlert = () => {
    setTransitionAlert(true);
    setTimeout(() => {
      setTransitionAlert(false);
    }, 1700);
  };

  return (
    <Form noValidate validated={validated} onSubmit={handleSubmit}>
      <Form.Group className="position-relative" controlId="validationPassword">
        <Form.Label>Password</Form.Label>
        <InputGroup hasValidation id="validationPassword" />
        <Form.Control
          type="password"
          aria-describedby="validationPassword"
          required
        />
        <Form.Control.Feedback tooltip type="invalid">
          Please enter your Password.
        </Form.Control.Feedback>
      </Form.Group>
      <Alert
        className={`mt-1 p-1 position-fixed ${
          transitionAlert ? "alert-shown" : "alert-hidden"
        }`}
        show={showSucessAlert}
        variant="success"
      >
        Registered user!
      </Alert>
      <Button className="mt-5" variant="primary" type="submit">
        Register
      </Button>
    </Form>
  );
}

这是 CodeSandbox

上的link

欢迎任何帮助!

【问题讨论】:

    标签: javascript reactjs react-bootstrap


    【解决方案1】:

    我不常用不受控制的组件,但我认为您可以通过将setValidated(false)event.target.reset() 添加到handleClickTransitionAlert 来解决这个问题,如下所示:

      const handleClickTransitionAlert = (event) => {
        setTransitionAlert(true);
        setTimeout(() => {
          setTransitionAlert(false);
          setValidated(false)
          event.target.reset()
        }, 1700);
      };
    

    【讨论】:

      【解决方案2】:

      尝试在 Bootsrap 表单上重置已验证的属性。 它应该看起来像这样(这是伪代码):

      import React, { useRef, useState } from 'react';
      const FormComponent = () => {
        const [validated, setValidated] = useState(false);
        const formRef = useRef(null);
      
        const handleReset = () => {
          formRef.current.reset();
          setValidated(false);
        };
      
        const handleSubmit = () => {
           // Do stuff here
           // On success or error:
          setValidated(true);
          handleReset();
        }
      
         return(
            <Form ref={formRef}  validated={validated} onSubmit={handleSubmit}>
              // your form inputs
            </Form>
         );
      export default FormComponent;
      }
      

      【讨论】:

      • 我尝试了你建议的方式,但工具提示仍然显示
      • 您是否尝试过将其调整为表单状态?
      • 我没有将其置于状态的想法,但我设法用另一个答案解决了它。感谢您的贡献。
      猜你喜欢
      • 2021-09-12
      • 1970-01-01
      • 2017-04-26
      • 2020-04-17
      • 2012-10-18
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多