React 关于Antd Pro 路由参数改变 页面没有重新渲染刷新

在使用Antd Pro的时候,我做了这样一张页面,二级模板页,左边是菜单,右边是详情

我在router.config.js文件中这样设置路由,这边用到了/:id去传递参数

 1  {
 2         path:'/catalog',
 3         name:'综合目录',
 4         icon:'bars',
 5         component:'./Catalog/Info',
 6         routes:[
 7           {
 8             path:'/catalog',
 9             redirect: '/catalog/survey',
10           },
11           {
12             path:'/catalog/survey',
13             component:'./Catalog/Survey'
14           },
15           {
16             path:'/catalog/engineering/:id',
17             component:'./Catalog/Engineering'
18           },
19           {
20             path:'/catalog/bidsection/:id',
21             component:'./Catalog/Bidsections'
22           },
23           {
24             path:'/catalog/project/:id',
25             component:'./Catalog/Project'
26           }
27         ]
28       },

问题出现了,比如页面初次访问  /catalog/engineering/1  的时候页面显示正常无误,但是页面再访问  /catalog/engineering/2  的时候页面却没有重新渲染。

我通过设置断点(debugger)了解到其实是详情部分的子页面没有重新进入构造函数( constructor(props) ),这边需要重申一下React生命周期,你会发现有个componentWillReceiveProps。

componentWillReceiveProps在初始化render的时候不会执行,它会在Component接受到新的状态(Props)时被触发,一般用于父组件状态更新时子组件的重新渲染。

 因此我在子页面里面加了如下代码:

1 componentWillReceiveProps = (nextProps) => {
2     const { match } = this.props;
3     if(match.params.id !== nextProps.match.params.id){
4       this.Id = nextProps.match.params.id;
5       this.getData();
6     }
7   }

这样刷新就正常了

posted @ 2019-04-11 10:43  咖啡漩涡  阅读(3834)  评论(0编辑  收藏  举报