繁体   English   中英

提交表单后如何清除 React Bootstrap textarea 表单控件?

[英]How to clear a React Bootstrap textarea form control after the form is submitted?

我有一个用 React Bootstrap 制作的表单,可以简单地提交一个将保存在数据库中的字符串。 它有效并保存了提交的消息,但我不知道如何在提交消息时清除文本区域。

如您所见,我尝试做的是使用 useState 挂钩设置一个空值,但在提交表单后,字符串在文本区域中仍然可见。 有什么办法吗?

const Form = (props) => {

    const [isLoading, setLoading] = useState(false);
    const [value, setValue] = useState(props.value);

    const handleSubmit = async event => {
        setLoading(true);
        event.preventDefault();

        const res = await fetch(
            // here I call the api
        )
        result = await res.json();
        setValue(null);
        setLoading(false);
    };


    return (
        <Form onSubmit={handleSubmit}>
            <Form.Group className="mb-3" controlId="text">
                <Form.Control as="textarea"
                              required
                              type="text"
                              placeholder=""
                              defaultValue={value}
                />
            </Form.Group>

            <Button
                variant="primary"
                type="submit"
                disabled={isLoading}
            >
                {isLoading ? 'Saving...' : 'Save'}
            </Button>
        </Form>
    )
}

export default Form;

从 props 中删除值 - 表单组件应包含此 state。然后,对于受控输入,您需要将 Form.Control 上的“defaultValue”更改为“value”。 同时添加 onChange 并设置值。 在表单提交上,您可以将值 state 设置为空字符串,而不是 null:

https://codesandbox.io/s/competent-carson-wupp3i

在我看来,您的 textarea 目前是uncontrolled ,因此对value所做的任何更改都不会在 Form.Control 组件中更新。

   <Form.Control 
      as="textarea" 
      rows={3}
      value={value}
      onChange={e => {
         setValue(e.target.value);
      }
   />

我可能不会使用defaultValue道具,而是使用setValue(props.value)来重置您的处理程序 function 中的value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM