简述React-Router 4怎样在路由变化时重新渲染同⼀个组件 ?
参考答案:
在 React-Router 4 中,如果你希望路由变化时重新渲染同一个组件,你可以使用 componentWillReceiveProps
生命周期方法或 componentDidUpdate
生命周期方法。这是因为当路由变化时,React-Router 会将新的 match
、location
和 history
属性传递给 <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 会自动处理组件的重新渲染。