react-router-dom多路由共用一个组件时,切换页面地址,页面不刷新的问题
时间: 2024-03-21 07:40:33 浏览: 17
在 React 中,如果同一个组件在多个页面中使用,而这些页面地址的变化仅仅是参数的不同,React 不会重新渲染组件,因为它会认为这些组件都是相同的,因此页面不会刷新。
解决这个问题的一个方法是在组件内部监听地址参数的变化,然后根据参数的变化重新渲染组件。这可以通过在组件内使用 `componentDidUpdate` 方法来实现。在这个方法中,你可以检查当前的地址参数和上一次的地址参数是否有变化,如果有变化就重新渲染组件。
例如,假设你的组件是 `MyComponent`,它使用了 `react-router-dom` 库中的 `withRouter` 方法来获取路由信息。在 `MyComponent` 组件中,你可以这样实现重新渲染:
```jsx
import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';
class MyComponent extends Component {
componentDidUpdate(prevProps) {
const { match: { params: { id } } } = this.props;
const { match: { params: { id: prevId } } } = prevProps;
// 如果地址参数变化了,就重新渲染组件
if (id !== prevId) {
this.forceUpdate();
}
}
render() {
const { match: { params: { id } } } = this.props;
return (
<div>
<p>当前地址参数为:{id}</p>
</div>
);
}
}
export default withRouter(MyComponent);
```
在上面的代码中,我们在 `componentDidUpdate` 方法中获取当前的地址参数和上一次的地址参数,如果它们不相同,就调用 `forceUpdate` 方法强制重新渲染组件。
希望这个方法可以帮助你解决问题。