我使用nextjs 13.5.4与应用路由器。我试图实现不同的加载.tsx为每个页面,但问题是父加载.tsx样式总是显示,而渲染嵌套页面与它自己的加载. tsx。所以当我渲染一个嵌套页面有多个加载页面应用之前,数据被提取。
7tofc5zh1#
这是Next.js的设计。
https://nextjs.org/docs/app/building-your-application/routing/pages-and-layouts所以如果你有一个app/parent/layout.tsx和app/parent/child/layout.tsx:
app/parent/layout.tsx
app/parent/child/layout.tsx
/parent
parent/layout.tsx
/parent/child
parent/child/layout.tsx
你可以在这里阅读更多关于这种行为的信息:https://nextjs.org/docs/app/building-your-application/routing/pages-and-layouts#nesting-layouts
66bbxpm52#
我认为一个好的解决方案是从父路由中删除loading.tsx,然后添加一个挂起,并使用一个加载器作为后备,如下所示
function page() { return ( <div> <h1>Welcome</h1> <Suspense fallback={<Loading />}> <Main /> </Suspense> </div> );}
function page() {
return (
<div>
<h1>Welcome</h1>
<Suspense fallback={<Loading />}>
<Main />
</Suspense>
</div>
);
}
字符串在这里,页面的主要部分(所有Nextjs的数据获取逻辑)可以进入Main,Nextjs将在数据可用时立即流式传输组件,这样,子路由将不再继承任何loading.tsx,并且可能使用自己专用的loading.tsx
2条答案
按热度按时间7tofc5zh1#
这是Next.js的设计。
https://nextjs.org/docs/app/building-your-application/routing/pages-and-layouts
所以如果你有一个
app/parent/layout.tsx
和app/parent/child/layout.tsx
:/parent
时,将仅应用parent/layout.tsx
/parent/child
时,两种布局都将被应用,parent/layout.tsx
包裹parent/child/layout.tsx
你可以在这里阅读更多关于这种行为的信息:https://nextjs.org/docs/app/building-your-application/routing/pages-and-layouts#nesting-layouts
66bbxpm52#
我认为一个好的解决方案是从父路由中删除loading.tsx,然后添加一个挂起,并使用一个加载器作为后备,如下所示
字符串
在这里,页面的主要部分(所有Nextjs的数据获取逻辑)可以进入Main,Nextjs将在数据可用时立即流式传输组件,这样,子路由将不再继承任何loading.tsx,并且可能使用自己专用的loading.tsx