Я пытаюсь реализовать экран загрузки при изменении маршрутов в моем приложении Nextjs, например / home -> / about.
Моя текущая реализация выглядит следующим образом.Я устанавливаю исходное загруженное состояние на false и затем изменяю его на componentDidMount .Я также вызываю функцию Router.events.on внутри componentDidMount , чтобы изменить состояние загрузки, когда начинается изменение маршрута.
_app.js в папке страниц
class MyApp extends App {
constructor(props) {
super(props);
this.state = {
loaded: false,
};
}
componentDidMount() {
this.setState({ loaded: true });
Router.events.on('routeChangeStart', () => this.setState({ loaded: false }));
Router.events.on('routeChangeComplete', () => this.setState({ loaded: true }));
}
render() {
const { Component, pageProps } = this.props;
const { loaded } = this.state;
const visibleStyle = {
display: '',
transition: 'display 3s',
};
const inVisibleStyle = {
display: 'none',
transition: 'display 3s',
};
return (
<Container>
<>
<span style={loaded ? inVisibleStyle : visibleStyle}>
<Loader />
</span>
<span style={loaded ? visibleStyle : inVisibleStyle}>
<Component {...pageProps} />
</span>
</>
</Container>
);
}
}
Это прекрасно работает, но я чувствую, что может быть лучшее решение, более элегантное решение,Это единственный способ, который не является трудоемким для реализации этой функции загрузки, или есть альтернатива?