Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >单击submit后,如何清除react中的输入字段?

单击submit后,如何清除react中的输入字段?
EN

Stack Overflow用户
提问于 2021-04-28 06:16:26
回答 3查看 449关注 0票数 0

这是我的页脚中有表单的部分,我需要这个表单在提交后重置或清除输入,我试图在handleSubmit(HandleSubmit){}中添加event.target.reset();但没有起作用,我试图添加变量使其等于'‘空,但没有发生任何事情。

这是handleSubmit

代码语言:javascript
代码运行次数:0
复制
    async handleSubmit(event) {
    event.preventDefault();

    const data = {
      name: this.state.name,
      email: this.state.email,
      phone: this.state.number,
      subject:this.state.subject,
      text: this.state.message,
    };
    const url = "http://localhost:3030/send-email";
    const result = await fetch(url, {
      method: "POST",
      body: JSON.stringify(data),
      headers: {
        "Content-Type": "application/json",
      },
    });
    console.log(result);
    
  }

这是表格

代码语言:javascript
代码运行次数:0
复制
 <form onSubmit={this.handleSubmit}>
                <Grid container>
                  <Grid className={classes.gridOne} item xs={12}>
                    <TextField
                      className={classes.textArea}
                      fullWidth
                      id="name"
                      label="Name"
                      name="name"
                      type="text"
                      value={this.state.name}
                      onChange={this.handleChangeName}
                    />
                  </Grid>
                  <Grid
                    item
                    lg={6}
                    md={12}
                    sm={12}
                    xs={12}
                    className={classes.gridTwo}
                  >
                    <TextField
                      className={classes.textArea}
                      fullWidth
                      id="email"
                      label="E-mail"
                      name="email"
                      type="email"
                      value={this.state.email}
                      onChange={this.handleChangeEmail}
                    />
                  </Grid>
                  <Grid
                    item
                    lg={6}
                    md={12}
                    sm={12}
                    xs={12}
                    className={classes.gridThree}
                  >
                    <TextField
                      className={classes.textArea}
                      fullWidth
                      id="phone"
                      label="Phone"
                      name="number"
                      type="number"
                      value={this.state.number}
                      onChange={this.handleChangeNumber}
                    />
                  </Grid>
                  <Grid item xs={12} className={classes.gridFour}>
                  <TextField
                      className={classes.textArea}
                      fullWidth
                      id="subject"
                      label="Subject"
                      name="subject"
                      type="text"
                      value={this.state.subject}
                      onChange={this.handleChangeSubject}
                    />
                  </Grid>
                  <Grid item xs={12} className={classes.gridFour}>
                    <TextField
                      name="message"
                      id="message"
                      label="Message"
                      placeholder="Placeholder"
                      rows={4}
                      multiline
                      fullWidth
                      className={classes.textArea}
                      value={this.state.message}
                      onChange={this.handleChangeMessage}
                    />
                  </Grid>
                 
                  <Grid item xs={12}>
                    <Button
                      type="submit"
                      id="test"
                      className={classes.button}
                      variant="outlined"
                      
                    >
                      Send Message
                    </Button>
                  </Grid>
                </Grid>
              </form>

这就是所有的代码

代码语言:javascript
代码运行次数:0
复制
 import React, { Component } from "react";
    import Typography from "@material-ui/core/Typography";
    import Container from "@material-ui/core/Container";
    import Grid from "@material-ui/core/Grid";
    import { withStyles } from "@material-ui/core/styles";
    import TextField from "@material-ui/core/TextField";
    import { Link } from "@material-ui/core";
    import Button from "@material-ui/core/Button";
    
   
    class Footer extends Component {
      constructor(props) {
        super(props);
        this.state = { name: "" };
        this.state = { email: "" };
        this.state = { number: "" };
        this.state = { message: "" };
        this.state = { subject: "" };
        
    
        this.handleChangeName = this.handleChangeName.bind(this);
        this.handleChangeEmail = this.handleChangeEmail.bind(this);
        this.handleChangeNumber = this.handleChangeNumber.bind(this);
        this.handleChangeMessage = this.handleChangeMessage.bind(this);
        this.handleChangeSubject = this.handleChangeSubject.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
      }
      handleChangeName(event) {
        this.setState({ name: event.target.value });
      }
      handleChangeEmail(event) {
        this.setState({ email: event.target.value });
      }
      handleChangeNumber(event) {
        this.setState({ number: event.target.value });
      }
      handleChangeMessage(event) {
        this.setState({ message: event.target.value });
      }
      handleChangeSubject(event) {
        this.setState({ subject: event.target.value });
      }
    
    
      async handleSubmit(event) {
        event.preventDefault();
    
        const data = {
          name: this.state.name,
          email: this.state.email,
          phone: this.state.number,
          subject:this.state.subject,
          text: this.state.message,
        };
        const url = "http://localhost:3030/send-email";
        const result = await fetch(url, {
          method: "POST",
          body: JSON.stringify(data),
          headers: {
            "Content-Type": "application/json",
          },
        });
        console.log(result);
        
      }
    
      state = {};
      render() {
        // const send = (props) => {
        //     sendMail(this.state.name, this.state.email, this.state.number,this.state.message);
        // };
        const { classes } = this.props;
        return (
          <div className={classes.backG}>
            <Container className={classes.padContainer}>
              <Grid container>
                <Grid item lg={4} md={4} sm={12} xs={12}></Grid>
        
                <Grid item lg={8} md={8} sm={12} xs={12}>
                  <Typography className={classes.titleTwo}>
                    Interested in doing a project together? Email me
                  </Typography>
                  <form onSubmit={this.handleSubmit}>
                    <Grid container>
                      <Grid className={classes.gridOne} item xs={12}>
                        <TextField
                          className={classes.textArea}
                          fullWidth
                          id="name"
                          label="Name"
                          name="name"
                          type="text"
                          value={this.state.name}
                          onChange={this.handleChangeName}
                        />
                      </Grid>
                      <Grid
                        item
                        lg={6}
                        md={12}
                        sm={12}
                        xs={12}
                        className={classes.gridTwo}
                      >
                        <TextField
                          className={classes.textArea}
                          fullWidth
                          id="email"
                          label="E-mail"
                          name="email"
                          type="email"
                          value={this.state.email}
                          onChange={this.handleChangeEmail}
                        />
                      </Grid>
                      <Grid
                        item
                        lg={6}
                        md={12}
                        sm={12}
                        xs={12}
                        className={classes.gridThree}
                      >
                        <TextField
                          className={classes.textArea}
                          fullWidth
                          id="phone"
                          label="Phone"
                          name="number"
                          type="number"
                          value={this.state.number}
                          onChange={this.handleChangeNumber}
                        />
                      </Grid>
                      <Grid item xs={12} className={classes.gridFour}>
                      <TextField
                          className={classes.textArea}
                          fullWidth
                          id="subject"
                          label="Subject"
                          name="subject"
                          type="text"
                          value={this.state.subject}
                          onChange={this.handleChangeSubject}
                        />
                      </Grid>
                      <Grid item xs={12} className={classes.gridFour}>
                        <TextField
                          name="message"
                          id="message"
                          label="Message"
                          placeholder="Placeholder"
                          rows={4}
                          multiline
                          fullWidth
                          className={classes.textArea}
                          value={this.state.message}
                          onChange={this.handleChangeMessage}
                        />
                      </Grid>
                     
                      <Grid item xs={12}>
                        <Button
                          type="submit"
                          id="test"
                          className={classes.button}
                          variant="outlined"
                          
                        >
                          Send Message
                        </Button>
                      </Grid>
                    </Grid>
                  </form>
                </Grid>
              </Grid>
            </Container>
          </div>
        );
      }
    }
    
    export default withStyles(useStyles)(Footer);
EN

回答 3

Stack Overflow用户

发布于 2021-04-28 06:19:30

您应该初始化状态,如下所示:

代码语言:javascript
代码运行次数:0
复制
 constructor(props) {
    super(props);
    this.state = {
      name: "",
      email: "",
      number: "",
      message: "",
      subject: ""
    }

然后你只需要重置状态,因为输入是受控制的,它们也会更新。尝试:

代码语言:javascript
代码运行次数:0
复制
this.setState({
  name: '',
  email: '',
  phone: '',
  subject: '',
  text: ''
});
票数 0
EN

Stack Overflow用户

发布于 2021-04-28 06:30:32

我认为好的解决方案是在你的类组件中创建函数来重置状态,然后在fetch和肯定的结果之后你可以重置字段,否则你可能会抛出一些错误消息,所以

代码语言:javascript
代码运行次数:0
复制
class Footer extends Component {
   ...
   function resetState () {
      this.setState({
      name: '',
      email: '',
      phone: '',
      subject: '',
      text: ''
   });
}

然后在你的handleSubmit函数中,你可以这样做:

代码语言:javascript
代码运行次数:0
复制
async handleSubmit(event) {
   event.preventDefault();
    
   const data = {
      name: this.state.name,
      email: this.state.email,
      phone: this.state.number,
      subject:this.state.subject,
      text: this.state.message,
    };
   const url = "http://localhost:3030/send-email";
   const result = await fetch(url, {
      method: "POST",
      body: JSON.stringify(data),
      headers: {
         "Content-Type": "application/json",
      },
      });
      console.log(result);

      if (result === "OK") {
         this.resetState();
      }
      else { 
         alert("Some error occurred");
      }
   }
票数 0
EN

Stack Overflow用户

发布于 2021-04-28 06:36:32

为了在提交后将表单设置为空,只需将状态更改为空字符串或简单地"“。您的handleSubmit函数应该如下所示

代码语言:javascript
代码运行次数:0
复制
async handleSubmit(event) {
     event.preventDefault();
 
     const data = {
       name: this.state.name,
       email: this.state.email,
       phone: this.state.number,
       subject:this.state.subject,
       text: this.state.message,
     };
     const url = "http://localhost:3030/send-email";
     const result = await fetch(url, {
       method: "POST",
       body: JSON.stringify(data),
       headers: {
         "Content-Type": "application/json",
       },
     });
     console.log(result);
     this.setState({
          name: "",
          email: "",
          phone: "",
          subject: "",
          text: "",
     })
     
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67294682

复制
相关文章
一系列令人敬畏的.NET核心库,工具,框架和软件[通俗易懂]
原文地址:https://github.com/thangchung/awesome-dotnet-core
全栈程序员站长
2022/09/13
18.8K0
前后端分离项目模板
进入 demo-backend/src/main/resources 打开 application.yaml 文件修改数据源配置:
浪漫主义狗
2023/09/04
1880
前后端分离项目模板
Java 后端开发实践 - 项目模板
整理出一套公共性的项目模板,旨在尽量多地包含日常开发所需,减少开发者的重复性工作以及提供一些最佳实践。
芋道源码
2020/12/08
6480
Java 后端开发实践 - 项目模板
Blazor资源大全,很棒的Blazor(1)
Blazor允许您使用C#而不是JavaScript构建交互式Web用户界面。Blazor应用程序由使用C#、HTML和CSS实现的可重用的Web用户界面组件组成。客户端和服务器代码都是用C#编写的,允许您共享代码和库。 更多信息请参阅官方Blazor网站[22]。
用户10786849
2023/10/13
5660
Blazor资源大全,很棒的Blazor(1)
创建API服务最小只要4行代码!!!尝新体验ASP.NET Core 6预览版本中的最小Web API(minimal APIS)新特性
本文首发于《创建API服务最小只要4行代码!!!尝新体验ASP.NET Core 6预览版本中的最小Web API(minimal APIS)新特性》
Rector
2021/08/19
5.2K0
创建API服务最小只要4行代码!!!尝新体验ASP.NET Core 6预览版本中的最小Web API(minimal APIS)新特性
后端开发实践:Spring Boot项目模板
在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为“第0个迭代”要做的事情。但是,当项目运行了一段时间之后再来反观,我总会发现一些不足的地方,要么测试分类没有分好,要么基本的编码架子没有考虑周全。
Java团长
2019/07/19
1.6K0
后端开发实践:Spring Boot项目模板
React项目配置6(前后端分离如何控制用户权限)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React项目配置1(如何管理项目公共js方法)---2018.01.11 2、React项目配置2(自己封装Ajax)---2018.01.12 3、React项目配置3(如何管理项目API接口)---2018.01.15 4、React项目配置4(如何在开发时跨域获取api请求)---2018.01.16 5、React项目配置5(引入MockJs,实现假接口开发)---2018.01.17 6、R
前端人人
2018/04/11
1.6K0
Rainbond 中Vue、React项目如何调用后端接口
通常我们会在项目的全局配置文件.env.production中直接写入后端ip,例如:
曾庆国
2020/11/19
1.5K0
.NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)
一、前言 本篇开发环境? 1、操作系统:CentOS7(因为ken比较偏爱CentOS7) 2、SDK版本:.NET Core 2.0 Preview 你可能需要的前置知识 1、了解如何通过Hyper-V安装CentOS虚拟机 2、了解CentOS7基础命令/常用命令 二、安装 .NET Core SDK 1、安装必要依赖 sudo yum -y install libunwind libicu 2、下载(SDK列表) cd /home/downloads curl -sSL -o dotnet-
KenTalk
2018/09/11
1.6K0
.NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)
一、前言 本篇开发环境? 1、操作系统: Windows 10 X64 2、SDK: .NET Core 2.0 Preview 二、安装 .NET Core SDK 1、下载 .NET Core 下载地址:https://www.microsoft.com/net/download/core 根据自己电脑情况选择对应版本即可 .NET CORE 2.0下载地址:https://aka.ms/dotnet-sdk-2.0.0-preview2-win-x64 2、安装 微软出品,一键安装,只需一步,看图
KenTalk
2018/09/11
1.6K0
.NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)
后端开发实践系列——Spring Boot项目模板
在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为“第0个迭代”要做的事情。但是,当项目运行了一段时间之后再来反观,我总会发现一些不足的地方,要么测试分类没有分好,要么基本的编码架子没有考虑周全。
好好学java
2019/12/05
4390
后端开发实践系列——Spring Boot项目模板
别了,JavaScript;你好,Blazor
Web开发与JavaScript开发向来是同义词。直到WebAssembly的横空出世,WebAssembly (Wasm)是一种在浏览器中可以执行的二进制指令。 WebAssembly 的 官方工具链 能够编译 C/C++ 代码,但许多社区也提供了不同语言的编译器,如 Rust,Python,Java 和 Blazor(C#)。特别是 Rust 社区非常活跃,可以开始看到完整的前端框架,如 Yew 和 Dodrio,这为基于浏览器的应用带来了更多新的可能性,只要测试一些使用 WebAssembly 构建的优秀应用,就可知道基于浏览器的近乎原生的应用现在已经成为现实,例如 Sketchup 或 Magnum。
张善友
2020/06/19
3.1K0
别了,JavaScript;你好,Blazor
ApiTemplate:.net后端项目模板完善与总结
ApiTemplate后端项目开发模板,发布也有一段时间了。为了补充应用场景,以及详细说明本人总结的一些开发经验,现已常见的《用户/登录权限验证》功能模块来进行详细的讲解。我会以为开发此模拟的实现路径为主线进行说明,希望能帮助到某些开发朋友。
sam dragon
2020/06/29
5030
ApiTemplate:.net后端项目模板完善与总结
.NET周报【1月第3期 2023-01-20】
https://www.cnblogs.com/InCerry/p/building-a-self-contained-game-in-c-under-8-kilobytes-74c3cf60ea04.html
InCerry
2023/03/08
4.8K0
.NET周报【1月第3期 2023-01-20】
使用.NET Core+Docker 开发微服务
.NET Core发布很久了,因为近几年主要使用java,所以还没使用过.NET Core,今天正好有一个c#写的demo,需要做成服务,不想再转成java来实现,考虑使用.NET CORE来尝下鲜,目标是开发一个微服务,然后部署到Docker swarm集群,供其他应用调用。
JadePeng
2018/09/27
3.2K0
使用.NET Core+Docker 开发微服务
【周一通勤电台 · 特辑】六千字漫谈2022后端框架流行趋势
这篇文章基于我对后端框架的了解以及研究,提供了2021-2022年度以及未来一年内可能流行的后台框架。
翊君
2022/03/15
4.4K0
【周一通勤电台 · 特辑】六千字漫谈2022后端框架流行趋势
Meteor React Native 项目模板更新啦!
之前Spencer Carli曾发布了Meteor+React Native的项目模板,这个模板发布已经有3个多月了,并且有一些过时。作者最近重新构思了这个模板,让它更适合实际的项目而不仅仅是一个De
时见疏星
2018/06/01
9040
.NET周报 【6月第4期 2023-06-25】
https://www.cnblogs.com/eventhorizon/p/17497359.html
InCerry
2023/08/31
2980
.NET周报 【6月第4期 2023-06-25】
《从零开始学ASP.NET CORE MVC》:VS2019创建ASP.NET Core Web程序(三)
步骤1:在Visual Studio 2019中创建新的asp.net Core项目
角落的白板报
2019/05/05
3.9K0
《从零开始学ASP.NET CORE MVC》:VS2019创建ASP.NET Core Web程序(三)
《从零开始学ASP.NET CORE MVC》:VS2017创建ASP.NET Core Web程序(三)
步骤1:在Visual Studio 2017中创建新的asp.net Core项目
角落的白板报
2019/05/05
2.8K0
《从零开始学ASP.NET CORE MVC》:VS2017创建ASP.NET Core Web程序(三)

相似问题

DateTime与时间戳的比较

12

比较DateTime unix时间戳

10

无法将datetime.datetime与int进行比较;将datetime与unix时间戳进行比较

10

.Net DateTime.Now与PostgreSQL时间戳比较

319

MySQL:比较datetime和时间戳

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文