在我的NextJS应用程序中,我似乎无法访问窗口 未处理的拒绝(ReferenceError):未定义窗口componentWillMount(){ console.log(‘window.innerHeight’,window.innerHeight);}
从中移动代码 componentWillMount() 至 componentDidMount() :
componentWillMount()
componentDidMount()
componentDidMount() { console.log('window.innerHeight', window.innerHeight); }
在NextJS中, componentDidMount() 只执行客户端在哪里 window 和其他浏览器特定的API将可用。来自NextJS 维基 :
window
Next.js是通用的,这意味着它首先在服务器端执行代码, 客户端。窗口对象仅存在于客户端,因此如果 你绝对需要在一些React组件中访问它 应该将该代码放在componentDidMount中。这个生命周期方法会 只能在客户端上执行。您可能还想检查是否存在 不是一些可能适合您需求的替代通用库。
沿着同样的路线, componentWillMount() 将会 弃用 在React的第17版中,因此在不久的将来有效地使用它可能是不安全的。
componentWillMount() 生命周期钩子在服务器和客户端都可以工作。在您的情况下,服务器在页面服务期间不会知道“窗口”或“文档”,建议将代码移动到其中
的 解决方案1: 强>
componentDidMount()</code>.
的 或者,解决方案2 强>
如果它只是你想要执行的东西,那么你可以写下这样的东西:
componentWillMount() { if (typeof window !== 'undefined') { console.log('window.innerHeight', window.innerHeight); } }