javascript - 提交时清除输入字段

标签 javascript reactjs react-hooks

事情非常简单明了,我想在提交字段时清除我的输入字段。

状态:

const [formData, setFormData] = useState({
   linkName: "",
   link: ""
});

handleSubmit函数:

   Axios.post("/api/social", body, config)
      .then(
          setSocialList(prev => [
               ...prev,
               { _id: Math.random(), link, linkName }
          ])
      )
      .then(setFormData({ link: " ", linkName: " " }));
} catch (err) {
    console.error(err);
}

这样我就无法清除我的 formData 状态,因此输入字段在提交时不会清除。

完整代码:https://pastebin.com/5DCMLHPr

最佳答案

您需要将 link 和 linkName 的值与输入字段绑定(bind),否则该值会在状态中更新,但输入仍将具有输入的值,并且不会反射(reflect)任何以编程方式更新的值。

import React, { Fragment, useState, useContext } from "react";
import { Button, Form, FormGroup, Label, Input, Row, Col } from "reactstrap";
import Axios from "axios";
import { SocialContext } from "./SocialContext";

const SocialForm = () => {
    const [formData, setFormData] = useState({
        linkName: "",
        link: ""
    });
    const [socialList, setSocialList] = useContext(SocialContext);
    const { linkName, link } = formData;
    const onChange = e =>
        setFormData({ ...formData, [e.target.name]: e.target.value });
    const token = localStorage.getItem("token");
    const handleSubmit = e => {
        e.preventDefault();
        const socialList = {
            linkName,
            link
        };
        try {
            const config = {
                headers: {
                    "Content-Type": "application/json",
                    "x-auth-token": `${token}`
                }
            };
            const body = JSON.stringify(socialList);
            Axios.post("/api/social", body, config)
                .then(
                    setSocialList(prev => [
                        ...prev,
                        { _id: Math.random(), link, linkName }
                    ])
                )
                .then(setFormData({ link: " ", linkName: " " }));
        } catch (err) {
            console.error(err);
        }
    };
    return (
        <Fragment>
            <br />
            <Form onSubmit={e => handleSubmit(e)} className="socialForm">
                <Row form>
                    <Col md={5}>
                        <FormGroup>
                            <Label for="LinkName">LinkName</Label>
                            <Input
                                type="text"
                                name="linkName"
                                value={linkName}
                                placeholder="Ex. Facebook"
                                onChange={e => onChange(e)}
                            />
                        </FormGroup>
                    </Col>
                    <Col md={5}>
                        <FormGroup>
                            <Label for="Link">Link</Label>
                            <Input
                                type="text"
                                name="link"
                                value={link}
                                placeholder="Ex. https://www.facebook.com/"
                                onChange={e => onChange(e)}
                            />
                        </FormGroup>
                    </Col>
                </Row>
                <Button>Add</Button>
            </Form>
        </Fragment>
    );
};

export default SocialForm;

关于javascript - 提交时清除输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59521502/

相关文章:

javascript - HTML 自定义元素子容器

javascript - 无法加载 ext-all.js 文件

javascript - 如何在 ReactJS 中的事件上添加或删除类名?

javascript - 变量未在 React Native 中作为整数传递

reactjs - 如何使用react-testing-library使用ref测试逻辑并更新useEffect/useLayoutEffect内的状态

javascript - 将菜单转换为下拉菜单

javascript - history.back() 不能像 Chrome 中预期的那样与 HTML5 history API 一起使用

javascript - Webpack 不会将我使用的图像复制到 react 组件中

reactjs - react : declaration merging for react-table types doesn't work. 类型 'TableInstance' 上不存在属性

javascript - useRef() Hook 自定义组件