在页面加载之前调用Next.js CompononentDidMount

时间:2019-07-19 18:44:36

标签: reactjs next.js

我将componentDidMount内的setState显示为true,并且在渲染器内有一个if(this.state.show == true) return(components...),所以我想要的是在next.js完成页面加载时应该显示我的组件。

但是由于某些原因,在显示页面之前调用了componentdidmount,并且在页面仍加载时开始了组件动画。因此,当实际显示页面时,用户会在动画中间捕捉到我不想要的动画

我的静态文件夹中有很多图像,因此我想接下来要加载它们,这就是为什么要花很长时间的原因,但是为什么componentDidMount在页面加载完成之前被调用? (index.js的componentDidMount不是其render方法中的组件)

我禁用了组件的ssr,但是没有用。我提到的页面没有从数据库中获取任何内容,并且没有使用getInitialProps。它只是next.js页面,其渲染方法中包含组件。

通过这种方式,我仅在生产时注意到此行为,因为当应用程序实际部署到远程服务器时,因为加载静态文件夹需要花费时间。在localhost上,此行为并不明显。

1 个答案:

答案 0 :(得分:1)

基本上,getInitialProps将在调用componentDidMount之前触发。

您可以通过console.log里面的每一个来证明,知道getInitialProps的{​​{1}}将在您的终端中登录。

要说明console.log的意外行为,您可以:

在React组件树中,在所有子组件也都已安装之后,将触发componentDidMount()。这意味着,任何组件的componentDidMount()在挂载其父组件之前都会被触发。

  

因此,如果您要测量DOM的位置和大小等,请使用   子组件的componentDidMount()是不安全的放置地点/时间   做这个。

     

在您的情况下:要从100%的宽度/高度获得准确的读数   组件,进行此类测量的安全场所应位于   顶部反应组件的componentDidMount()。 100%是宽度/高度   相对于父/容器。因此只能进行测量   父母也被挂载之后。

Quoted From

此外,如果您依赖componentDidMount中的load个事件,则应该测量属性getInitialProps并将其作为道具从show发送,如下所示:< / p>

getInitialProps