У меня есть компонент статей, который отображает список сообщений. Список разбит на страницы, поэтому на странице может отображаться не более 10 сообщений. Существует кнопка «Следующая страница», при нажатии которой обновляется состояние компонента и соответствующий параметр URL-адреса, например:
страница 1: /новости
страница 2: /новости?page=2
страница 3: /новости?page=3
...и так далее. То, как настроены методы constructor()
и render()
, будет считывать этот параметр URL-адреса и отображать правильные сообщения, если пользователь переходит непосредственно к /news?page=3, например.
Проблема, с которой я сталкиваюсь, заключается в том, что кнопки браузера «Назад» и «Вперед», похоже, не перерисовывают страницу. Таким образом, если пользователь несколько раз нажимает кнопку «Следующая страница», а затем нажимает кнопку «Назад», 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
при нажатии кнопки "назад/вперед"? - person Ben   schedule 06.03.2018