我将Next.js用于我的React应用程序,因为它具有服务器端呈现功能。正如我通过日志检查的那样,ComponentWillMount
和getInitialProps
方法都在服务器端运行。这些方法之间有什么不同吗?
我应该什么时候在ComponentWillMount
中运行,什么时候我应该在getInitialProps
中运行
我没看到Next.js提到过这件事。
发布于 2017-11-24 03:50:37
GetInitialProps
ComponentWillMount
发布于 2018-05-20 05:39:01
警告
50%的被接受的答案是错误的。这就是为什么。让我把我的答案分成两部分:
第1部分:
上被调用
错误的,GetInitialProps在上被执行服务器和浏览器(记住Next.js的目标是实现通用的JavaScript)。以下是文档中所说的:
第2部分:
第二部分是更准确地回答实际问题。很明显,OP混淆了ComponentDidMount和ComponentWillMount.因为在Next.js的情况下,比较GetInitialProps和ComponentDidMount更有意义,因为它们都能够进行异步调用来获取数据,并且都允许事后呈现(在ComponentWillMount).的情况下,这是而不是
在任何情况下,您使用其中一个或另一个,有一些区别:
GetInitialProps:是由Next.js提供的,它并不总是被触发的,所以要小心。当您将一个组件包装在另一个组件中时,就会发生这种情况。如果父组件有GetInitialProps,则永远不会触发子组件的GetInitialProps。有关详细信息,请参阅this thread。
ComponentDidMount:是React实现,它总是在浏览器上触发。
你可能会问:‘那么我应该在什么时候使用这个或那个?’。实际上,它非常令人困惑,同时也非常简单。这是一条经验法则:
当您的组件充当页面,并且您希望将数据作为属性提供时,
发布于 2017-11-24 02:55:52
componentWillMount
is the Component Lifecycle methods。
根据documentation的说法
componentWillMount()
在挂载之前立即被调用。它是在render()
之前调用的,因此在此方法中同步调用setState()
不会触发额外的渲染。通常,我们建议改用constructor()
。避免在此方法中引入任何副作用或订阅。对于这些用例,请改用componentDidMount()
。这是在服务器渲染时调用的唯一生命周期钩子。
https://stackoverflow.com/questions/47461803
复制相似问题