next.js是服务器渲染,运行在node上的,所以在
componentDidMount
之前不会得到window
,在页面渲染到浏览器后,才能找到window
解决办法一:关闭ssr
export default dynamic(
()=>import('../views/home'),
{
// ssr:false,
loading:()=><PageLoading/>
}
)
解决办法二:先渲染LoadingPage
,componentDidMount
之后重新渲染HomePage
_app.tsx
function MyApp({ Component, pageProps }:AppProps) {
const [load,setLoad] = useState(false)
useEffect(()=>{
console.log('----------',global.window.screen);
setLoad(true)
},[])
return (
!load ? <PageLoading/> : <Suspense fallback={<PageLoading/>}>
...
</Suspense>
)
}
网友评论