我将componentDidMount
内的setState显示为true,并且在渲染器内有一个if(this.state.show == true) return(components...)
,所以我想要的是在next.js完成页面加载时应该显示我的组件。
但是由于某些原因,在显示页面之前调用了componentdidmount
,并且在页面仍加载时开始了组件动画。因此,当实际显示页面时,用户会在动画中间捕捉到我不想要的动画
我的静态文件夹中有很多图像,因此我想接下来要加载它们,这就是为什么要花很长时间的原因,但是为什么componentDidMount
在页面加载完成之前被调用? (index.js的componentDidMount不是其render方法中的组件)
我禁用了组件的ssr,但是没有用。我提到的页面没有从数据库中获取任何内容,并且没有使用getInitialProps。它只是next.js页面,其渲染方法中包含组件。
通过这种方式,我仅在生产时注意到此行为,因为当应用程序实际部署到远程服务器时,因为加载静态文件夹需要花费时间。在localhost上,此行为并不明显。
答案 0 :(得分:1)
基本上,getInitialProps
将在调用componentDidMount
之前触发。
您可以通过console.log
里面的每一个来证明,知道getInitialProps
的{{1}}将在您的终端中登录。
要说明console.log
的意外行为,您可以:
在React组件树中,在所有子组件也都已安装之后,将触发componentDidMount()。这意味着,任何组件的componentDidMount()在挂载其父组件之前都会被触发。
因此,如果您要测量DOM的位置和大小等,请使用 子组件的componentDidMount()是不安全的放置地点/时间 做这个。
在您的情况下:要从100%的宽度/高度获得准确的读数 组件,进行此类测量的安全场所应位于 顶部反应组件的componentDidMount()。 100%是宽度/高度 相对于父/容器。因此只能进行测量 父母也被挂载之后。
此外,如果您依赖componentDidMount
中的load
个事件,则应该测量属性getInitialProps
并将其作为道具从show
发送,如下所示:< / p>
getInitialProps