记一次“拷贝”的前端代码出错

遇到了一个差点让我用玄学去解释的问题,最后终于还是找到原因了。更加坚定了一个信念

计算机世界里没有毫无原因的错误,所有的问题都能找到对应的解释。

一、问题出现

登录页面,点击登录按钮,页面刷新,但是又回到了登录页面。

登录跳转代码(代码一):

 1 <div className="container">
 2             <form className="form-signin">
 3               <h2 className="form-signin-heading">Please sign in</h2>
 4               <label htmlFor="inputEmail" className="sr-only">Email address</label>
 5               <input type="text" id="inputEmail" className="form-control" placeholder="Email address" required autofocus/>
 6               <label htmlFor="inputPassword" className="sr-only">Password</label>
 7               <input type="password" id="inputPassword" className="form-control" placeholder="Password" required/>
 8               <div className="checkbox">
 9                 <label><input type="checkbox" value="remember-me"/> Remember me</label>
10               </div>
11               <button className="btn btn-lg btn-primary btn-block" type="submit" onClick={() => login(‘Lings‘,‘123456‘)}>Sign in</button>
12             </form>
13           </div>

二、问题排查

跟踪日志,发现确实执行了跳转动作,但是结束后又访问了"/"路径,我配置的是登录页面,所以又回到了登录页面。

可能前端的高手一眼就能发现问题:

button的type设置为了submit,隐含着一个默认的提交动作。

三、修改测试

将button的type修改为button

<button className="btn btn-lg btn-primary btn-block" type="button" onClick={() => login(‘Lings‘,‘123456‘)}>Sign in</button>

四、问题解决

Duang~问题解决!老老实实的跳转了,不再跳回登录页面了。

五、新的问题

我反而陷入了更大的疑惑,因为这个代码是我从一个运行的好好的项目”拷贝“过来的,那个项目怎么没有这个问题?
再看看另外一个项目的代码:

 1 <div className="container">
 2             <form className="form-signin">
 3               <h2 className="form-signin-heading">Please sign in</h2>
 4               <label htmlFor="inputEmail" className="sr-only">Email address</label>
 5               <input type="email" id="inputEmail" className="form-control" placeholder="Email address" required autofocus/>
 6               <label htmlFor="inputPassword" className="sr-only">Password</label>
 7               <input type="password" id="inputPassword" className="form-control" placeholder="Password" required/>
 8               <div className="checkbox">
 9                 <label><input type="checkbox" value="remember-me"/> Remember me</label>
10               </div>
11               <button className="btn btn-lg btn-primary btn-block" type="submit" onClick={() => login(‘Lings‘,‘123456‘)}>Sign in</button>
12             </form>
13           </div>

这个button的type也设置为了submit,为啥这个就不报错?

六、个人的一个看法

正常情况下,完全一样的代码和输入,每次得到完全不同的结果是不可能的。偶尔有一次偏差倒是可以理解。

那就对比代码吧,看到不一样的了!!!

七、一个差别
A. 代码一

5:<input type="text" 

B. 代码二

5:<input type="email"

八、更新的问题

这个类型不一样为啥会导致submit不生效?

九、问题找到

在测试登录的时候,我在这个input输入的"admin"。

在代码一中,符合text的文本类型的校验。
在代码二中,不符合email的正则,校验出错。

所以代码二中的submit动作就没有触发!

十、一个感想

强大的封装库让代码”敲打“更轻松了。但是问题排查呢?至少在不是非常了解一个组件的时候,可能会带来更多的想不到吧。

凡事皆是如此,一看”取舍“,二看”格“。

时间: 2024-08-26 01:49:10

记一次“拷贝”的前端代码出错的相关文章

前端代码异常日志收集与监控

在复杂的网络环境和浏览器环境下,自测.QA测试以及 Code Review 都是不够的,如果对页面稳定性和准确性要求较高,就必须有一套完善的代码异常监控体系,本文从前端代码异常监控的方法和问题着手,尽量全面地阐述错误日志收集各个阶段中可能遇到的阻碍和处理方案. ? 收集日志的方法 平时收集日志的手段,可以归类为两个方面,一个是逻辑中的错误判断,为主动判断:一个是利用语言给我们提供的捷径,暴力式获取错误信息,如 try..catch 和 window.onerror. 1. 主动判断 我们在一些运

Web 前端代码规范

Web 前端代码规范 最后更新时间:2017-06-25 原始文章链接:https://github.com/bxm0927/web-code-standards 此项目用于记录规范的.高可维护性的前端代码,这是通过分析 Github 众多前端代码库,总结出来的前端代码书写规范. 目录 前端普适性规范 HTML 规范 CSS 规范 JS 规范 License public domain, Just take it. Thanks @Ruan YiFeng: https://github.com/

好的前端代码标准

开始学前端的时候,遇到什么问题,从网上查资料,解决了就pass,不过心里心里还是比较没谱的,因为不符合学院派的作风.起码也得知道前端的原则是什么,好的前端代码的标准是什么,才能评价自己的代码. 最近终于抽空看了看有关JS的书,总算心里有了点底. 一.层次分离 把前端分为三层:结构层.表示层.行为层,这三样分别对应者HTML.CSS.JS.基本的现状是: 1. HTML里能嵌入CSS和JS 2. CSS和JS功能上有重叠的地方 所谓层次分离就是不混淆各自的主要功能,狭义上说就是HTML定义结构,C

关于前端代码编写的一点心得

在此次团队项目中,我一直都是处于学习状态,能够写出一些稍微有点水平的前端页面,但是还是很菜,在此次的前端页面中,有一个地方我觉得特别要注意,就是前端代码的规范编写,规范编写代码对每一个程序员都十分重要,在这里,我将自己收集到的一些关于html和css的编写规范列在下面: 在任何一个项目或者系统开发之前都需要定制一个开发约定和规则,这样有利于项目的整体风格统一.代码维护和扩展.由于Web项目开发的分散性.独立性.整合的交互性等,所以定制一套完整的约定和规则显得尤为重要. 第一节 CSS样式文件的命

前端代码异常监控总结

[这个在去年8月就起稿了,一直没有发布....] 一.前言 说到前端监控大家应该都不会陌生,这是现代前端工程的标配之一.引入前端监控系统,可以使用例如fundebug,Sentry等第三方监控神器,当然你完全可以自己定制一套符合实际情况的监控模型.一个监控系统大致可以分为四个阶段:日志采集.日志存储.统计与分析.报告和警告.下面主要从几个方面谈谈我对前端代码异常监控的一些理解. 二.JS异处理 脚本错误一般分为两种:语法错误,运行时错误.常见的处理方式有: 2.1 try..catch 捕获 用

前端代码tomcat下简单部署

软件 filezilla [ftp]  +  visionapp Remote Desktop[远程桌面] (前提:前后端代码分离,如前端angular实现) ftp上传到机器{软件 filezilla,输入ip 账号密码  ssh-端口22} linux下解压 unzip -o tomcat**.zip -d tomcat java --version 加权限 chmod +x *.sh 将前端代码通过ftp上传到 tomcat/webapps 解压代码文件 unzip prjectPorta

记:Android 安装apk的代码实现

private void installApk(String fileUri) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse("file://" + fileUri), "application/vnd.android.package-archive"); startActivity(intent); this.finish();} 记:Androi

从网上或者哪里拷贝下来的代码前面总有编号,如何去掉(原创)

从网上或者哪里拷贝下来的代码前面总有编号,如何去掉呢,网上有说用程序的太麻烦,于是,我找到了下面两种方法,share 一下~ 1.使用正则表达式:在editorplus(notepad++)里按ctrl+h,弹出框里勾选上“正则表达式(regular expression)”,然后第一个框里写   ^[0-9]*.第二个框里敲一个空格 2.这个是notepad++特有的,而editorplus没有的将代码拷进去,按住ctrl+alt的同时,按住鼠标左键不放,将需要的代码部分截取出来,复制.黏贴即

Duang~Duang~Duang 还在使用jsfiddle和jsbin做在线前端代码展示和演示吗? 试试更强大的在线代码分享工具吧!

传统的代码分享工具JSbin和JSfilddle jsfiddle和jsbin可能是前端开发中最早最常用的代码“把玩”工具,拥有大量的粉丝和用户,作为前端开发攻城师来说,我个人过去也常常使用. 不过作为国外的服务和产品,加载速度非常不理解,经常半天加载不上,如下图: 而且最重要的在于大量的CDN引用JS/CSS来自于Google CDN,大家也明白,天朝不再给Google发VISA啦,所有的Google域名下的服务或者文件都无法正常访问.除非你FQ!使用非常不流畅滴说!,如下图: 轻视频代码分享