跳到主要内容

简述React-Router 4怎样在路由变化时重新渲染同⼀个组件 ?

参考答案:

在 React-Router 4 中,如果你希望路由变化时重新渲染同一个组件,你可以使用 componentWillReceiveProps 生命周期方法或 componentDidUpdate 生命周期方法。这是因为当路由变化时,React-Router 会将新的 matchlocationhistory 属性传递给 <Route> 组件的子组件。

以下是一个使用 componentWillReceiveProps 的示例:

import React from 'react';
import { RouteComponentProps } from 'react-router-dom';

class MyComponent extends React.Component<RouteComponentProps> {
  componentWillReceiveProps(nextProps) {
    if (this.props.location !== nextProps.location) {
      // 当路由变化时,执行你的逻辑
      console.log('路由变化了!');
    }
  }

  render() {
    // 渲染你的组件
    return <div>我的组件</div>;
  }
}

export default MyComponent;

或者,你也可以使用 componentDidUpdate 生命周期方法:

import React from 'react';
import { RouteComponentProps } from 'react-router-dom';

class MyComponent extends React.Component<RouteComponentProps> {
  componentDidUpdate(prevProps) {
    if (this.props.location !== prevProps.location) {
      // 当路由变化时,执行你的逻辑
      console.log('路由变化了!');
    }
  }

  render() {
    // 渲染你的组件
    return <div>我的组件</div>;
  }
}

export default MyComponent;

这两种方法都可以帮助你在路由变化时重新渲染同一个组件,并执行一些特定的逻辑。注意,componentWillReceiveProps 已经在 React 16.3 版本中被废弃,并在 React 17.0 版本中被移除,所以推荐使用 componentDidUpdate

另外,如果你只是希望组件在路由变化时重新渲染,而不执行任何特定的逻辑,那么你可以省略这两个生命周期方法,React-Router 会自动处理组件的重新渲染。