react踩坑

简介: react踩坑

文章目录

1. 默认路由在V5被废除

1.1. Attempted import error: 'IndexRoute' is not exported from 'react-router-dom'.

ps:在react-routerV5 已经废除掉了默认路由

如图,在react-router的官方文档里面已经找不到IndexRoute的API的。

1.2. tiny-warning.esm.js:11 Warning: You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored

  • ⚠警告的路由组件写法
  • 问题分析

开始的时候,想要使用默认路由,后来发现被废弃了,直接从IndexRoute改成了Route,忘记调整顺序。

  • 解决办法
import {  Route, Switch } from 'react-router';
import App from '../views/App/App'
import Login from '../views/Login/Login'
import { BrowserRouter } from 'react-router-dom';
function Routes() {
  return (
    <BrowserRouter >
    <Switch>
        <Route path='/' component={App} />
        <Route path='/Login' component={Login} />
    </Switch>
    </BrowserRouter>
  );
}
export default Routes;

2、组件问题

2.1. `Warning: The tag is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.

at routes`

组件的首字母应该大写,不然识别不了

2.2. Warning: Login(...): Norendermethod found on the returned component instance: you may have forgotten to definerender.

  • 报错代码
import React from 'react';
import { withRouter } from 'react-router';
class Login extends React.Component{
    render(){
        return (
            <div className="login">
                登录
            </div>
        )
    }
}
export default withRouter(Login)

2.3 `The tag is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.

  • 直接去掉<text></text>文本直接暴露,问题解决,效果一致

3. 构造器问题

3.1 `src\views\Login\Login.jsx

Line 5:5: Useless constructor no-useless-constructor `

  • 解决办法:加return


3.2. 不要使用没有调用的constructor

  • 错误代码,还是上面的登录代码(听者伤心闻者流泪)
  • 解决办法: 把constructor注释掉

  • 结果

3.3 . tiny-warning.esm.js:11 Warning: You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored


4. 类型检查

4.1. Typo in declared prop type: Boolean react/no-typos

> 从 React v15.5 开始 , React.PropTypes  助手函数已被弃用,建议使用  prop-types 库  来定义 contextTypes 。

博客参考

5.生命周期问题

5.1 Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.

超过最大更新深度。当组件在componentWillUpdate或componentDidUpdate内部反复调用setState时,就会发生这种情况。

React限制嵌套更新的数量,以防止无限循环。

5.2 rendershouldComponentUpdate调用一次被执行两次

import {
    Component
} from 'react';
const { log } = console
export default class lifeCircle extends Component{
    componentDidMount(){
        log('componentDidMount---')
    }
    componentDidUpdate(){
        log('componentDidUpdate---')
    }
    shouldComponentUpdate(){
        log('shouldComponentUpdate---')
        return true
    }
    state = {
        count : 0
    }
    change = ()=>{
        this.setState({
            count : this.state.count + 1
        })
    }
    render(){
        log('render-----')
        return (
            <div>
                <h1>生命周期变化{this.state.count}</h1>
                <button onClick={this.change}>加1</button>
            </div>
        )
    }
}
  • 运行结果

  • 可以看到render以及shouldComponentUpdate每次都执行了两次
  • 解决办法
    经多方查阅,发现是react严格模式造成的问题.

  • 去掉index.js里面的React.StrictMode去掉即可(不建议这么做,严格模式可以自动帮你检查部分错误)
    – 修改前

    –修改后


–结果

6. 感言

之前简单学习了一下`react`,然后没有业务需要,一直没用,今天回来一用,频繁踩坑.。学习了还是得应用呀,互联网的脚步,稍微落后一步,就出大麻烦,呜呜


相关文章
|
存储 前端开发 JavaScript
十二款·富文本编辑器:数字创作的瑞士军刀
在数字化时代,内容创作已经成为我们日常生活中不可或缺的一部分。无论是撰写一封电子邮件、准备一份报告、还是在社交媒体上分享心情,文字都是我们表达和沟通的基石。而在这个过程中,富文本编辑器就如同一把瑞士军刀,为我们提供了多种功能以增强和美化我们的文字内容。
1205 1
|
算法 Shell 计算机视觉
【特效】对实时动态人脸进行马赛克及贴图马赛克处理及一些拓展
【特效】对实时动态人脸进行马赛克及贴图马赛克处理及一些拓展
552 0
|
JavaScript 前端开发 Web App开发
带你读《Three. js开发指南: 基于WebGL和HTML5在网页上渲染 3D图形和动画(原书第3版)》之一:使用Three.js创建你的第一个三维场景
本书将介绍如何直在浏览器中创建漂亮的3D场景和动画,并且充分发挥WebGL和现代浏览器的潜能。首先介绍基本概念和基础组件,然后通过逐渐扩展示例代码逐步深讲解更多高级技术。在本书中读者将学到如何从外部加载3D模型和具有真实效果的材质纹理、学习使用Three.js提供的摄像机组件来实现在3D场景中飞行和走动、如何将HTML5视频和画布作为材质贴在3D模型表面。此外还将学习变形动画和骨骼动画,甚至还会涉及在场景中使用物理模拟的方法,例如重力、碰撞检测等等。
|
JSON JavaScript 前端开发
js如何格式化一个JSON对象?
js如何格式化一个JSON对象?
549 3
|
JavaScript 前端开发
js防抖函数返回值问题解决方案
本文介绍了如何在JavaScript中创建一个带有返回值的防抖函数,通过结合Promise来实现。这种防抖函数可以在事件触发一定时间后再执行函数,并能处理异步操作的返回值。文章提供了防抖函数的实现代码和如何在实际项目中使用该防抖函数的示例。
223 1
|
前端开发
React中的无限渲染问题总结
React中的无限渲染问题总结 前言 无限渲染情况汇总分析 第一种情况 第二种情况 第三种情况:state和setState分别在useEffect的依赖和回调中(前两种只与useState有关) 第四种:缺失依赖 第五种:函数(对象)作为依赖 第六种:将数组(对象)作为依赖 第七种:将对象作为依赖 总结 参考
812 0
React中的无限渲染问题总结
|
存储 JSON 资源调度
next.js博客搭建_react-markdown渲染内容(第三步)
next.js博客搭建_react-markdown渲染内容(第三步)
568 1
|
JSON JavaScript 安全
使用 React+ethers.js 开发简单加密钱包(一)
使用 React+ethers.js 开发简单加密钱包
794 0
|
安全 网络安全 数据安全/隐私保护
导致SSL证书无效的原因有哪些?
如果发现SSL证书失效,首先应该看看证书是不是已经过期。为了保障数据安全,实时验证网站身份真实性,SSL证书的有效期逐年缩短,目前各大浏览器支持的SSL证书有效期都不超过一年。如果发现证书已经过期,需要及时续签或者重新购买证书。
790 0
导致SSL证书无效的原因有哪些?