使用React 开发web app的过程中,总会有踩坑的时候,针对常见的各种异常提示,作以下汇总,以便帮助大家避免少踩坑

汇总中会有相关对应的错误异常栗子用法

1. Uncaught TypeError: Cannot read property xxx of undefined

这个异常基本上是开发过程中最常见的异常了,引发异常的使用场景也有很多,举几个栗子:

  • 未初始化state的属性值便直接使用
class App extends Component {state = {}  componentDidMount() {axios.post('https://extension-ms.juejin.im/resources/gold', {category: 'frontend'}).then(res => {this.setState({data: res.data.data});});}render() {return (<div className="App">{this.state.data.map(v => <span key={v.id}>{v.title}</span>)}</div>);}
}
// 处理方案有几种
// 1: 初始化state --> state = {data: []}
// 2: 采用短路写法 this.state.data && this.state.data.map()
  • 未初始化组件的props参数值
// 使用组件时,数据来自异步获取
// 1: 初始化props (推荐)
class Greeting extends React.Component {static defaultProps = {   person: { name: 'react' }}render() {return (<div>Hello, {this.props.person.name}</div>)}
}
// 也可以
Greeting.defaultProps = {name: 'Stranger'
};
// 2: render时初始化
render() {const { person = {name: 'react'} } = this.props;return (<div>Hello, {person.name}</div>)
}
// 其他

2. this的绑定问题

testClick() {console.log(this.state.data)
}
render() {return (<button onClick={this.testClick}>测试</button>);
}

处理绑定的有三种方式:

(1) 调用函数时绑定:onClick={this.testClick.bind(this)}

(2) 构造函数中绑定:

constructor (props) {super(props)this.testClick = this.testClick.bind(this)
}

(3) 箭头函数:(个人推荐箭头函数,更便捷)

testClick = () => {console.log(this.state.data)
}

3. 循环key的问题

设置唯一的key值防止对已存在的dom重新渲染

this.state.data.map(v => <span key={v.id}>{v.title}</span>)
// 设置唯一性的id,不要设置循环的index
// bad
this.state.data.map((v, i) => <span key={i}>{v.title}</span>)

官方给了一个用index作为key导致的问题demo: 戳我查看codepen

4. componentDidUpdate或componentWillUpdate 中更新state问题

// 一般问题是需要通过props来更新state导致的
// 老版本的在componentWillReceiveProps中修改state
componentWillReceiveProps(nextProps) {this.setState({data: nextProps.data});
}
// 16.3以后的新版本在getDerivedStateFromProps中更新state
static getDerivedStateFromProps(nextProps, prevState) {return {data: nextProps.data}
}

5. Objects are not valid as a React child 组件参数设置异常 或者直接渲染对象

render(){const obj = {a: 1};return (<span>{obj}</span>  // --> <span>{obj.a}</span>)
}const CompA = (data) => <span>{data}<span>
// --> ({data}) => <span>{data}</span>

6. 忘记export 组件

找到对应的组件,export 即可

7. .map (xxx) is not a function

和上面很类似,这个问题常发生在数据来自异步加载,没有进行相应的初始化或者初始化不规范,数据类型不一致导致的问题

8. 组件没有return DOM

// error
render() {<div className="App"></div>
}
// yes
render() {return(<div className="App"></div>)
}

9. 使用未知的标签或者组件名称使用小写

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

其实就是字面意思,找到对应的标签,改成首字母大写

10. 路由外使用link组件

使用Link的组件必须在用Router包裹的组件下使用

如果不是局部刷新的页面,可在最外层写一个空白的路由页面组件将内容页面包裹

const BlankPage = () => (<HashRouter><Route path="/" component={App} /></HashRouter>
)
export default BlankPage;

11. 跳转相同路由报错

Warning: You cannot PUSH the same path using hash history

<Linkto={somePath}replace={somePath === this.props.location.pathname}
>
跳转
</Link>// history操作,判断跳转路由相同的话,用replace
this.props.history.push  --> this.props.history.replace

总结

总结来看这些bug都比较简单,有时候细节和不规范往往会导致一些常见或者莫名bug,制定开发规范或文档可以轻松避免一些没必要的bug,年中了,祝大家bug越来越少,加班越来越少~

若有常见问题遗漏,欢迎大佬随时补充。

前端攻城狮3群:743490497。欢迎各位同学进群分享和交流。

React Web开发中常见的异常提示以及解决方案相关推荐

  1. 【Web安全】Web开发中常见的安全误区

    安全是Web应用程序不容忽视的一个重要因素,而在Web应用开发中,一些开发者由于缺乏安全方面的意识,导致Web应用存在风险.下面来介绍Web开发中常见的一些安全误区. 如果我们使用Web框架,那么不必 ...

  2. web开发中常见的安全漏洞及避免方法

    1.安全攻击 1.SQL.HTML.JS.OS命令注入 2.XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码 3.CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信 ...

  3. WEB开发中常见的漏洞

    一.SQL注入漏洞  SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了对输入字符串中夹带 ...

  4. Java 开发中常见的异常有哪些?

    1.空指针异常(NullPointException):当对象不存在,却又去调用对象的属性或方法时,就会出现该异常 2.数组越界异常(ArrayIndexOutOfBoundsException):当 ...

  5. web开发中常见的错误信息

    1.Warning: mysql_connect() [function.mysql-connect]: Access denied for user'beijingphp'@'localhost'  ...

  6. iOS开发中常见的一些异常

    iOS开发中常见的一些异常 参考文章: (1)iOS开发中常见的一些异常 (2)https://www.cnblogs.com/feng9exe/p/7244936.html 备忘一下.

  7. java web开发常见问题_javaWeb开发中常见的问题

    1.修改表单提交的时候不好使可能是因为没写对应隐藏域的ID 2.el表达式在js代码中要加"",例如 "${}" 3.JavaScript中的函数也有重载的特性 ...

  8. Web开发中的常见应用

    一.文件下载 文件下载功能是web开发中经常使用到的功能,使用HttpServletResponse对象就可以实现文件的下载. 文件下载功能的实现思路: 获取要下载的文件的绝对路径 获取要下载的文件名 ...

  9. 【笔记-node】《imooc-nodejs入门到企业web开发中的应用》

    目录 课程名 备注 入门必学 nodejs入门到企业web开发中的应用 框架与工具 node.js+koa2+mysql打造前后端分离精品项目<旧岛> 项目实战 20190317-2020 ...

  10. 第123天:移动web开发中的常见问题

    一.函数库 underscoreJS _.template: <ol class="carousel-indicators"><!--渲染的HTML字符串--&g ...

最新文章

  1. 用eclipse玩转Python,让习惯java开发的童鞋拥有一个更爽的开发体验
  2. KVM — 与 QEMU 和 Libvirt 的关系
  3. 微信 商城 php,PHP微信商城
  4. RPi 2B python opencv camera demo example
  5. 【计算机组成原理】定点数的表示和运算
  6. 形参与实参在函数中的传递
  7. js模板引擎 之handlebars.js
  8. asp.net生成高质量缩略图通用函数
  9. python爬虫结果是字节_入门爬虫?一文搞定!
  10. epoch,batch
  11. 激光打标机金橙子软件画出五角星最简单方法图解
  12. Tbschedule源码通读
  13. bootstrap框架写手机端app模板也很漂亮
  14. 微信小程序模板消息接口下线了,不用慌,调用统一服务消息接口来实现相同功能
  15. 什么是熔断? 熔断有哪几种状态 ?断路器的工作原理
  16. 小鸟云服务器怎么修改密码?
  17. 多元化邮件插图成鲜活生命力,助力邮件营销转化!
  18. Win10应用卸载(针对控制面板的卸载程序页面找不到的那些应用)
  19. python教程57--使用D-tale做透视表并生成图形
  20. LC5454.统计全1子矩阵(矩阵统计)

热门文章

  1. paddle serving
  2. 2021-09-1311. 盛最多水的容器 数组 双指针
  3. 推荐系统专利:一种信息推荐系统及方法
  4. flask不运行主函数解决方法
  5. pil对图像加透明 python_分享一个骚操作,用 Python 来 P 图
  6. 【GYM-100889 D】Dicy Numbers【数学推导求解】
  7. android 调用线程方法,Android使用线程获取网络图片的方法
  8. linux三剑客之sed命令,linux三剑客之sed命令
  9. java反射 泛型类型_【译】9. Java反射——泛型
  10. Windows 安装两个MYSQL实例