javascript - React Router goBack 函数必须执行两次
问题描述
我开始学习 React 路由器,但在使用 goBack 函数时遇到了一些问题,该函数位于 React 路由器的历史属性中。
我有一个简单的路线,我在其中呈现一个虚拟帖子,形成 JsonPlaceHolder API,并制作一个返回按钮,该按钮执行此功能。
returnToForwardPageHandler = () =>{
this.props.history.goBack();
}
现在帖子是动态加载的,具体取决于给定的 ID。
componentDidMount () {
if(this.props.match.params.id){
if ( !this.state.loadedPost || (this.state.loadedPost && this.state.loadedPost.id !== this.props.id) ) {
axios.get( 'https://jsonplaceholder.typicode.com/posts/' + this.props.match.params.id)
.then( response => {
// console.log(response);
this.setState( { loadedPost: response.data
} );
} );
}
}
}
但根据 id 的给出方式,我确实会得到不同的结果。
在给定帖子的 id 所在的组件中
postSelectedHandler = (id) => {
//this.setState({selectedPostId: id});
this.props.history.push('/' + id)
}
如果我手动设置 id 的状态,它工作正常。但是如果我使用this.props.history.push('/' + id),我必须点击两次按钮(执行returnToForwardPageHandler函数),结果不应该是一样的,我错过了什么?
解决方案
我希望这有帮助。如果没有,请提供有关您的路线的信息。
postSelectedHandler = (id) => {
//this.setState({selectedPostId: id});
this.props.history.push(`/${id}`)
}
推荐阅读
- python - 将时间序列数据绘制为堆积条形图
- python - 为什么 Laravel Redis::scan('*') 返回一个预期的键,但 Redis::keys('*') 不是?
- flutter - 如何在交错动画(颤振)中增加节拍数,控制器通过
- algorithm - BST 上的查询既不占用最大时间也不占用最小时间
- c++ - 虚拟函数中具有更改参数/返回类型的子类的工厂模式
- performance - MPI 中的屏障:如何实现屏障以使进程相互等待
- sql - Oracle Recursive Query Connect By Loop 在数据中
- facebook - 如何检查 facebook 的“主题”封装了什么?
- c++ - istream 没有正确地从文本文件中拆分输入
- sql - 使用函数计算员工从一列到另一列的工作天数