React项目报错× Unhandled Rejection (Error): Maximum update depth exceeded. This can happen when a compon

  • Post author:
  • Post category:其他


开发过程中的代码是这样的

render() {
    //只有路由组件才可以获取path,这时就需要withRouter
    const path = this.props.location.pathname
    const {navList} =this.props
    return(
     <TabBar className="footer-bottom">
         {
             navList.map((nav)=><Item
                key = {nav.path}
                title={nav.text}
                icon={{uri:require("./images/"+nav.icon+".png")}}
                selectedIcon={{uri:require("./images/"+nav.icon+"-selected.png")}}
                selected={path===nav.path}
                
                //下面就是产生错误的地方
                onPress={this.props.history.replace(nav.path)}
             />)
         }
     </TabBar>

浏览器报错如下:

在这里插入图片描述

大体意思就是在重复setstate,

原因就是React在初次渲染页面的时候会执行(this.props.history.replace(nav.path))这个方法,而这个方法的执行又会导致页面的重新渲染,这样反复执行堆栈就崩溃了。

所以运行项目的时候不需要立刻执行代码,只有点击之后才需要,这就涉及到函数加括号和不加的区别

传送门

js绑定函数需不需要加括号的问题



解决方法有两种

1.用ES6箭头函数

onPress={()=>this.props.history.replace(nav.path)}

2.再写一个方法,然后传入方法名(这里只是提供一种写法,但是参数需要修改一下,因为不一样)

MyOnPress=()=>{
	this.props.history.replace(this.props.nav.path)
}
onPress={this.MyOnPress}

文章若有错误,欢迎大佬批评指正,也欢迎大佬来讨论。



版权声明:本文为qq_44606064原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。