【发布时间】:2018-08-02 23:39:30
【问题描述】:
我有一个显示帖子列表的文章组件。该列表是分页的,因此每页最多可以显示 10 个帖子。有一个“下一页”按钮,单击该按钮将更新组件状态和相应的 url 参数,如下所示:
第 1 页:/新闻
第 2 页:/news?page=2
第 3 页:/news?page=3
...等等。 constructor() 和 render() 方法的设置方式,例如,如果用户直接导航到 /news?page=3,它将读取此 URL 参数并显示正确的帖子。
我遇到的问题是浏览器的后退和前进按钮似乎没有重新呈现页面。因此,如果用户点击“下一页”按钮几次,然后点击后退按钮,URL 将更新,但页面不会重新呈现。有没有办法强制它这样做?
我猜有一种方法可以通过添加 window.history 侦听器来完成此操作,但我不确定是否有推荐的做法与 gatsby-link 一起使用。
这是一个精简版的组件供参考:
import React, { Component } from 'react';
import { navigateTo } from 'gatsby-link';
import getUrlParameter from '../functions/getUrlParameter';
export default class extends Component {
constructor(props) {
super(props);
/* external function, will grab value
* of ?page= url parameter if it exists */
const urlParamPage = getUrlParameter('page');
const currentPage = urlParamPage ? urlParamPage : 1;
this.state = {
currentPage
};
}
nextPage() {
const { props, state } = this;
const urlParam = state.currentPage > 1
? `?page=${state.currentPage}`
: '';
navigateTo(props.pathname + urlParam);
this.setState({currentPage: this.state.currentPage + 1});
}
render() {
const { props, state } = this;
const articles = props.articles
.slice(state.currentPage * 10, state.currentPage * 10 + 10);
return (
<div>
<ul>
{articles.map((article) => <li>{article.title}</li>)}
</ul>
<button onClick={() => this.nextPage()}>Next Page</button>
</div>
);
}
}
【问题讨论】:
-
你能检查
componentWillReceiveProps是否在后退/前进按钮点击时被触发? -
hm 它根本没有被触发,在后退/前进点击或初始组件加载时
-
您使用的是哪个版本的 gatsby?通过浏览器按钮导航时,您是否还看到任何控制台错误?
-
@DivyanshuMaithani 我使用的是 gatsby 版本 1.9.158,没有出现控制台错误
标签: reactjs react-router back-button browser-history gatsby