reactjs - 如何在路由更改时停止重新渲染组件(通常是返回历史记录)?
问题描述
如果我的应用程序从/profile/1
to/company/1
然后我回到/profile/1
,则页面不应再次获取数据。
路由器配置:
<Switch>
<Route path="/profile/:id" component={Profile}/>
<Route path="/company/:id" component={Company}/>
</Switch>
配置文件组件
class Profile extends React.Component {
componentDidMount() {
this.fetchUserProfile(this.props.match.params.id);
}
componentDidUpdate(prevProps, prevState, snapshot) {
if (prevProps.match.params.id !== this.props.match.params.id) {
console.log("fetching profile again");
this.fetchUserProfile(this.props.match.params.id);
}
}
render(){
return <Link to={"/company/1"}>company</Link>
}
}
如何停止Profile
重新获取 api?componentDidUpdate
在这里没有帮助。
解决方案
您可以将数据缓存在类似sessionStorage
orlocalStorage
中,或者您可以使用redux。
您可以在此处阅读更多信息sessionStorage
:关于 sessionStorage 的 MDN Web 文档
然后在您componentDidMount
的缓存中,您可以检查数据是否已经存在于缓存中,如果没有,则仅获取。
下面是一个例子,componentDidMount
如果你使用,你可能会是什么样子sessionStorage
:
componentDidMount() {
let data = sessionStorage.getItem('profileData'); //Get the data from sessionStorage
if(data) {
this.setState({profile: data}) // Used cached data
}
else {
this.fetchUserProfile(this.props.match.params.id); // Fetch data
}
}
推荐阅读
- postgresql - 无法使用 \h 或 \ 打开“帮助”?在 Windows 10 上的 psql 中。命令“更多”没有正确编写,它说
- python - 分配的张量切片条件
- node.js - 我可以从 reactjs 应用程序中的 nodejs 服务器访问 cookie 数据吗?
- java - 将图形对象从服务器发送到客户端
- kubernetes - 如何从另一个现有 pod 创建一个新的 Kubernetes pod?
- vue.js - 自定义单选按钮上的 Vue v-model
- java - 使用正则表达式在特定字符后捕获部分字符串
- javascript - 节点异步问题
- python-3.x - ValueError: int() 以 10 为底的无效文字:'sdsd'
- python - Python 正则表达式将日期提取到数据框中的新列