为什么react重复点击一个链接的时候,会重复触发生命周期中的componentWillReceiveProps updata render

#1

路由如下:当我在B页面不断点击Bpage这个link的时候,为什么会触发生命周期函数中的componentWillReceiveProps updata render 。

const routes = [{
        path: '/Apage',
        component: Apage,
        routes:[
            {
                path: '/Apage/:params',
                component: AchildPage
            },
        ]
    },
    {
        path: '/Bpage/:name/:age',
        component: Bpage
    },
    {
        path: '/Cpage',
        component: Cpage,
      
    },

]
#2

你打断点看一下你的props,里面的值肯定有更新的

#3

建议深入了解下生命周期。只要props更新了就会触发更新阶段的生命周期函数,并不非得是props变化了才会更新,只要有新的props传入就会触发,也就是说componentWillReceiveProps()方法触发了,并不代表props一定发生了变化。只不过react没有去帮我们进行比对,需要我们自己去做比较确定是否继续当前的生命周期,这也就是shouldComponentUpdate()方法的意义所在,它默认返回true,继续当前的生命周期,我们可以自己编写函数返回 false使其不进行接下来的渲染步骤。其实react还是封装了一个pureComponent的,只不过用来进行浅对比。如果数据再复杂的话就要上immutable了。

#4

谢谢回答,里面没数据更新的,我已经找到原因了,可能是我想当然了,我根据Vue类比着学react,没仔细看文档,官网上面写的如下:

componentWillReceiveProps()在装配了的组件接收到新属性前调用。若你需要更新状态响应属性改变(例如,重置它),你可能需对比this.props和nextProps并在该方法中使用this.setState()处理状态改变。

注意即使属性未有任何改变,React可能也会调用该方法

,因此若你想要处理改变,请确保比较当前和之后的值。这可能会发生在当父组件引起你的组件重渲。
在 装配期间,React并不会调用带有初始属性的componentWillReceiveProps方法。其仅会调用该方法如果某些组件的属性可能更新。调用this.setState通常不会触发componentWillReceiveProps。

#5

谢谢热心回答。
我调试的时候,shouldComponentUpdate(nextProps, nextState)中nextProps和之前一样只有路由注入的props,没有变化,由于我并没有设置state所以nextState一直是Null.这个问题我是迷茫了两天,想不懂为什么要这么设计(太菜),按照官网的说法props不发生变化的情况下可能会触发更新,这个可能就说明不可控,想要可控就要自己shouldComponentUpdate(nextProps, nextState)进行判断。