zoukankan      html  css  js  c++  java
  • 记一次“拷贝”的前端代码出错

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

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

    一、问题出现

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

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

     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动作就没有触发!

    十、一个感想

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

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

  • 相关阅读:
    DPDK 多进程
    dpdk helloword
    dpdk-ring-ping
    【基于python实现UI自动化】3.0 selenium
    算法题:实现 strStr()函数
    python程序设计:某体操比赛共有10名运动员参加,12名评委将根据运动员表现进行评分(满分10分),请编写Python程序,解决下列问题:
    Scrapy框架实战(五):通用爬虫 CrawlSpider
    python爬虫爬取_高德地图_主要城市迁徙意愿排行榜_19年至今数据
    年轻就该多尝试,教你20小时Get一项新技能
    LeetCode:283.移动零——简单
  • 原文地址:https://www.cnblogs.com/yoyotl/p/7281693.html
Copyright © 2011-2022 走看看