react-router 同一路由,参数不同,页面没有刷新

Posted crazycode2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react-router 同一路由,参数不同,页面没有刷新相关的知识,希望对你有一定的参考价值。

使用 componentWillReceiveProps(newProps) 函数,当 props 改变时,我们就可以在该函数中通过 newProps.match.params.id 拿到新的url参数,进而进行更新。如下

componentWillReceiveProps(newProps) {
  const id = newProps.match.params.id;
  // 一些操作
}

如果使用这种方法的话,需要注意的一点是:

我们可能在react中使用的的组件不止一个,需要执行 componentWillReceiveProps 方法的组件可能是作为子组件存在的。也就是说react-router直接作用的组件是使用 componentWillReceiveProps 组件的父组件
这个时候路由参数的改变是监测不到的,为了能够监测到,需要在父组件中把 props 传给子组件,就像这样

<Route path="/hello/:id" component={MyHome} />
 
export default class MyHome extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
    };
  }
 
  render() {
    return (
      // react-router当url参数改变时不能自动更新页面,为了url参数改变时能够自动更新
      // 在子组件中使用componentWillReceiveProps(),当props改变时会自动调用该函数
      // 但是现在url的参数是直接作用在page(当前页面组件)上的,为了让子组件监测到props
      // 的变化,将props全部传给子组件
       <UserInfo {...this.props} />
    );
  }
}

export default class UserInfo extends React.Component {
  constructor(props) {
    super(props);
    this.state = {};
  }
 
  componentWillReceiveProps(newProps) {
    const id = newProps.match.params.id;
    //一些操作
  }
 
  render() {
    return (
      <div className="userinfo-container">
      </div>
    );
  }
}

.

以上是关于react-router 同一路由,参数不同,页面没有刷新的主要内容,如果未能解决你的问题,请参考以下文章

React Router 问题:React 在同一页面中渲染两个组件

在 React-Router V4 中以编程方式设置路由参数最终会出现“找不到页面”

react-router

Angular rc3 路由器 - 使用不同参数导航到同一页面

react-router的使用——路由的嵌套

react-router详细解释