社区首页 >问答首页 >React -开机自检后不刷新页面,出现错误响应

React -开机自检后不刷新页面,出现错误响应
EN

Stack Overflow用户
提问于 2019-08-24 08:32:36
回答 3查看 85关注 0票数 1

我有一个应用程序,它从服务器获取数据,它是用nodeJS编写的。我使用componentDidMount获取数据。在页面上,输入名称为包含数据的表,并且每一行都有复选框。当我点击“发送”按钮时,选中的行会在后端发送。在后端,我验证唯一的名称。如果不是,我返回错误。但fronted每次都会刷新。并且不可能获得错误消息。

代码语言:javascript
代码运行次数:0
复制
import React, {Component} from 'react';
import axios from 'axios';
import MyNavbar from "./MyNavbar";

class Offer extends Component {
    constructor(props) {
        super(props);
        this.handleSubmit = this.handleSubmit.bind(this);
        this.handleCheckedOrder = this.handleCheckedOrder.bind(this);
        this.state = {
            offers: [],
            name: '',
            selectedFoods: [],
            selectedBuild: 'Nevybráno',
            isOrderChecked: false
        };
    }

    componentDidMount() {
        this.getOffer();
    }

    getOffer() {
        const url = '/offer';
        axios.get(url).then(response => {
            this.setState({offers: response.data})
        }).catch(() => 'Cannot load menu');
    };

    handleNameChange = evt => {
        this.setState({name: evt.target.value});
    };

    handleChecboxChange = offer => {
        if (this.state.selectedFoods.includes(offer)) {
            this.setState({selectedFoods: this.state.selectedFoods.filter(item => item !== offer)});
        } else {
            this.setState({selectedFoods: [...this.state.selectedFoods, offer]});
        }
    };

    handleCheckedOrder() {
        this.setState({isChecked: !this.state.isChecked});
    }

    isValid() {
        let isEnabledSubmit = this.state.name.length > 0;
        let isSelectedFoodAndNotOnlySoap = this.state.selectedFoods.length > 0 && this.state.selectedFoods.some(food => food.index !== 0);
        let isSelectedBuild = this.state.selectedBuild !== 'Nevybráno';
        return isEnabledSubmit && isSelectedFoodAndNotOnlySoap && isSelectedBuild;
    }

    handleSubmit() {
        axios({
            method: 'post',
            url: '/order',
            headers: {},
            data: {
                name: this.state.name,
                food: this.state.selectedFoods,
                order: this.state.isChecked,
                build: this.state.selectedBuild
            }
        });
    };

    render() {
        const {offers} = this.state;
        const options = ["Nevybráno", "A", "B"];

        return (
            <div>
                <MyNavbar/>
                <div className="container">
                    <form className="form-inline justify-content-center" onSubmit={this.handleSubmit}>
                        <table className="table">
                            <tbody>
                            <tr>
                                <th>&nbsp;</th>
                                <th>#</th>
                                <th>Váha</th>
                                <th>Menu</th>
                                <th>Cena</th>
                            </tr>
                            {offers.map((offer) => {
                                return (
                                    <tr key={offer.index}>
                                        <td style={{width: '5%'}}>
                                            <input type="checkbox" className="checkbox"
                                                   onChange={this.handleChecboxChange.bind(this, offer)}/>
                                        </td>
                                        <td style={{width: '5%'}}>{offer.index}</td>
                                        <td style={{width: '10%'}}>{offer.weight}g</td>
                                        <td style={{width: '70%'}}>{offer.name}</td>
                                        <td style={{width: '20%'}}>{offer.discount} Kč</td>
                                    </tr>
                                )
                            })}
                            </tbody>
                        </table>

                        <label className="sr-only" htmlFor="inlineFormInput">Name</label>
                        <input type="text" className="form-control mb-2 mr-sm-2 mb-sm-0" id="inlineFormInput"
                               placeholder="Jméno" onChange={this.handleNameChange}/>

                        <label className="mr-sm-2" htmlFor="inlineFormCustomSelect">Budova</label>
                        <select className="custom-select mb-2 mr-sm-2 mb-sm-0" id="inlineFormCustomSelect"
                                onChange={(e) => this.setState({selectedBuild: e.target.value})}>
                            {options.map(option => {
                                return <option value={option} key={option}>{option}</option>
                            })}
                        </select>

                        <div className="form-check mb-2 mr-sm-2 mb-sm-0">
                            <label className="form-check-label">
                                <input className="form-check-input" type="checkbox"
                                       onChange={this.handleCheckedOrder}/> Objednám
                            </label>
                        </div>

                        <button type="submit" className="btn btn-secondary"
                                disabled={!this.isValid()}>Odeslat
                        </button>
                    </form>
                </div>
            </div>
        );
    }
}

export default Offer;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-24 08:39:36

这是因为默认情况下,该按钮会提交表单并刷新页面。这可以通过使用evt.preventDefault();来防止

代码语言:javascript
代码运行次数:0
复制
handleSubmit(evt) {
    evt.preventDefault();
    axios({
        method: 'post',
        url: '/order',
        headers: {},
        data: {
            name: this.state.name,
            food: this.state.selectedFoods,
            order: this.state.isChecked,
            build: this.state.selectedBuild
        }
    });
};
票数 4
EN

Stack Overflow用户

发布于 2019-08-24 09:09:44

除了什么maartendev's注释之外,要获取错误并导致组件状态,您可以将处理程序编写为:

代码语言:javascript
代码运行次数:0
复制
handleSubmit(evt) {
  evt.preventDefault();
  axios({
    method: 'post',
    url: '/order',
    headers: {},
    data: {
        name: this.state.name,
        food: this.state.selectedFoods,
        order: this.state.isChecked,
        build: this.state.selectedBuild
    }
   }).catch(({ response }) => this.setState({ errors: response.data }));
}

这会在this.state.errors中产生错误,这些错误可以在render方法中使用。

票数 2
EN

Stack Overflow用户

发布于 2019-08-24 12:21:44

尝试将其添加到表单submit function evt.preventDefault();}

代码语言:javascript
代码运行次数:0
复制
handleSubmit=(eve)=>
{
  evt.preventDefault();
}

告诉我它能不能用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57636350

复制
相关文章
网约车风云再起:“小窗口”和“大窗口”齐开
有的原地“满血复活”,如两年前悄悄下架的美团打车App,近日已经重新上架,且同时在上海、北京、南京等34城招募司机。
用户2908108
2021/07/23
1.6K0
根据顶点边数和点信息输出邻接矩阵
// ConsoleApplication23.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include #include using namespace std; #define MAXVEX 100 typedef char VertexType; typedef int EdgeType; typedef struct { VertexType vexs[MAXVEX]; Edge
川川菜鸟
2021/10/18
4150
模型矩阵、视图矩阵、投影矩阵
模型视图投影矩阵的作用,就是将顶点从局部坐标系转化到规范立方体(Canonical View Volnme)中。总而言之,模型视图投影矩阵=投影矩阵×视图矩阵×模型矩阵,模型矩阵将顶点从局部坐标系转化到世界坐标系中,视图矩阵将顶点从世界坐标系转化到视图坐标系下,而投影矩阵将顶点从视图坐标系转化到规范立方体中。
全栈程序员站长
2022/08/27
2.2K0
【Windows 逆向】OD 调试器工具 ( 显示模块窗口 | 显示记录窗口 | 显示内存窗口 | 显示线程 | 显示句柄 | 显示 CPU | 多窗口界面 )
" 模块窗口 " 内容如下 , 在模块窗口中 , 显示的都是 可执行文件 和 加载的 dll 动态库 ;
韩曙亮
2023/03/29
3.4K0
【Windows 逆向】OD 调试器工具 ( 显示模块窗口 | 显示记录窗口 | 显示内存窗口 | 显示线程 | 显示句柄 | 显示 CPU | 多窗口界面 )
统计各个分类和标签下的文章数
在我们的博客侧边栏有分类列表和标签列表,显示博客已有的全部文章分类。现在想在分类名和标签名后显示该分类或者标签下有多少篇文章,该怎么做呢?最优雅的方式就是使用 django 的 annotate 方法。
HelloGitHub
2021/05/14
7410
opencv窗口的创建/显示/销毁
说明:我们设置一个键盘上的q键,当窗口显示后,我们按下键盘上的q键则可以销毁显示的窗口。
淼学派对
2023/10/14
4300
Flex Air 主窗口和多个子窗口从属显示
项目组的程序需要做一个有主窗口和几个小的子窗口(一些控制板), 需求是:点击主窗口的时候,小的子窗口能保持在主窗口前边。 然后切换到其他软件的窗口的时候,主窗口和子窗口能跟着一起退到后边。 烦啊~~3天时间,已经试了N多方法。 1、重载NativeWindow,加入组件的方式。发现很多控件加不进去~~失败 2、一直处理orderToFrontOf(Main),但子窗口会一直闪烁。失败 3、用alwaysInFront,切换到其他软件的时候,把alwaysInFront设置为false。几乎成功了,但还是很多
用户1258909
2018/07/03
1.3K0
模拟试题A
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wpxu08/article/details/70208378
步行者08
2018/10/09
3.6K0
echarts的双y轴显示
第一步: 引入echarts import echarts from "echarts"; Vue.prototype.$echarts = echarts //引入组件(全局引入) 第二步: id绑定 <div id="pie"> /// pie 用于存放所要绘制的图形 第三步: 配置options,创建echarts实例 option1: { title: { text: "双坐标轴事例", //标题 show: f
用户4344670
2019/08/28
4.9K0
写给 python 程序员的 OpenGL 教程
OpenGL 是 Open Graphics Library 的简写,意为“开放式图形库”,是用于渲染 2D、3D 矢量图形的跨语言、跨平台的应用程序编程接口(API)。OpenGL 不是一个独立的平台,因此,它需要借助于一种编程语言才能被使用。C / C++ / python / java 都可以很好支持 OpengGL,我当然习惯性选择 python 语言。
全栈程序员站长
2022/07/22
3.3K0
写给 python 程序员的 OpenGL 教程
神奇的 SQL 之团结的力量 → JOIN
    闺蜜家暴富,买了一栋大别野,喊我去吃饭,菜挺丰盛的,筷子有些不给力,银筷子,好重,我说换个竹子的,闺蜜说,这种银筷子我家总共才五双,只有贵宾才能用~我咬着牙享受着贵宾待遇,终于,在第三次夹虾排滑落盘子时,我爆发了:去它喵的贵宾,我要虾排……不是……我要竹筷子!
青石路
2019/10/29
5440
神奇的 SQL 之团结的力量 → JOIN
图形渲染管线简介_渲染流水线和渲染管线
graphics rendering pipeline, 也被称为”the pipeline”,即图形渲染管线。
全栈程序员站长
2022/09/21
1.3K0
大学课程 | 计算机图形学,基于MFC和二维变换的画图软件
本文描述了二维复合变换的基本方法和思想,根据鼠标位置坐标获取起始点pStart和终止点pEnd的坐标,设计实现每个基本图形的画图方法,根据pStart和pEnd即可确定基本图形的控制点,进而绘制对应图形。规范化齐次坐标以后,图形几何变换可以表示为图形控制点点集合的规范化齐次坐标矩阵与二维变换矩阵相乘的形式,分别设置二维变换矩阵的参数信息,设计实现对应的方法,即可实现图形的二维变换功能。
Justlovesmile
2021/12/14
2.5K0
大学课程 | 计算机图形学,基于MFC和二维变换的画图软件
万字长文详解如何用Python玩转OpenGL | CSDN 博文精选
【编者按】OpenGL(开放式图形库),用于渲染 2D、3D 矢量图形的跨语言、跨平台的应用程序编程接口,C、C++、Python、Java等语言都能支持 OpenGL。本文作者以 Python 语法为例,用两万字详解 OpenGL 的理论知识、用法与实际操作,干货满满,一起来看看吧。
AI科技大本营
2019/12/02
9.5K0
万字长文详解如何用Python玩转OpenGL | CSDN 博文精选
Shader、Draw Call和渲染管线(Rendering Pipeline)
《Real-Time Rendering, Third Edition》   (PDF的配图链接)将一个渲染流程分为三个阶段:
meteoric
2018/11/20
1.3K0
模拟试题C
2.用编码裁剪法裁剪二维线段时,判断下列直线段采用哪种处理方法。假设直线段两个端点M、N的编码为1000和1001(按TBRL顺序)( )
步行者08
2018/10/09
2.1K0
WPF 获取全局所有窗口的创建显示事件 监控窗口打开
本文将告诉大家如何在 WPF 里面进行全局监控任意的窗口创建显示打开,可以获取到每个 WPF 窗口的打开的时机。如此可以用来辅助定位问题和输出日志
林德熙
2023/04/07
2.1K0
局域网SDN硬核技术内幕 19 团结一切可以团结的力量
我们发现,这个组网模型与园区SDN网络标准组网的区别在于,接入利用了旧有的交换机。我们回忆一下,园区SDN网络标准模型对接入交换机的要求——仅需要支持VLAN Access和VLAN Trunk即可。
用户8289326
2022/07/22
3740
局域网SDN硬核技术内幕 19 团结一切可以团结的力量
在窗口显示摄像头的帧
# coding=gbk import cv2 clicked=False def onMouse(event,x,y,flags,param): global clicked if event ==cv2.EVENT_LBUTTONUP: clicked = True cp=cv2.VideoCapture(0)#cp为cameraCapture缩写  # VideoCapture是opencv内置函数,参数为零代表第一个摄像头,一般也就是笔记本内置摄像头  cv2.namedWindow('mywindow') cv2.setMouseCallback('mywidow',onMouse) print ('Showing camera feed. Click window or press any key to stop.')               success, frame = cp.read()//不懂点击
用户2965768
2018/08/30
6700
opengl入门教程pdf[猎豹opengl快速入门]
概述OpenGLOpenGL是渲染2D、3D矢量图形硬件的一种软件接口。本质上说,它是一个3D图形和模型库,具有高度的可移植性,并且具有非常快的渲染速度。OpenGL并不是一种语言,而是更像一个C运行时函数库。它提供了一些预包装的功能,帮助开发人员编写功能强大的三维应用程序。OpenGL可以再多种操作系统平台上运行,例如各种版本的Windows、UNIX/Linux、MacOS和OS/...
Java架构师必看
2022/04/02
3.2K0
opengl入门教程pdf[猎豹opengl快速入门]

相似问题

团结中的双跳需要帮助

10

给定三角形的面法和顶点,如何求顶点的无圈阶?

10

团结5.2 -动画窗口/标签

10

在“团结”中,我如何设置窗口的大小?

20

单位立方体中三角形和顶点的计数

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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