我尝试在Next.js应用程序中实现更改路线时的加载屏幕,例如/home -〉/about。
我当前的实现如下:我将初始加载状态设置为false,然后在 componentDidMount 上更改它。我还调用 componentDidMount 中的 Router.events.on 函数,以便在路由更改开始时更改加载状态。
页面文件夹中的***_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>
);
}
}
这个方法非常好用,但是我觉得可能有更好的解决方案,更优雅的解决方案。这是实现这个加载功能的唯一方法吗?或者有其他选择吗?
5条答案
按热度按时间x8goxv8g1#
使用新的钩子API,这就是我要做的。
现在
<Loading/>
将在路线改变时显示...我使用react-spring制作动画,但是您可以使用任何您喜欢的库来完成此操作。您甚至可以更进一步,通过修改
handleStart
和handleComplete
方法(获取url
)来修改组件显示的时间。knpiaxh12#
为什么不在
_app.js
中使用nprogress
,如下所示链接到nprogress。
您还需要包含样式文件。如果您将css文件放在
static
目录下,则可以按如下方式访问样式:确保CSS在所有页面中可用...
它将适用于您所有的路线变化。
btqmn9zl3#
对于任何在2021年遇到这个问题的人来说,nextjs-progressbar包让这个问题变得超级简单。在您的Next.js
_app.js
中,只需添加:搞定!
Demo和屏幕截图:
kr98yfug4#
NProgress的新更新:
如果您使用Tailwind CSS,请从此处复制代码:https://unpkg.com/nprogress@0.2.0/nprogress.css并将代码粘贴到全局CSS文件中。
如果你想禁用微调器,请在
_app.tsx/jsx
文件中添加以下代码,并从CSS中删除微调器样式。来源链接:
7fhtutme5#
进度条,如NProgress,90行代码(与NProgress v0.2.0相比,为470行. js +70行. css):
使用方法:
更多信息:https://gist.github.com/tkrotoff/db8a8106cc93ae797ea968d78ea28047