Javascript 等待app.js加载,然后在Next.js上运行组件
我正在使用Next.js开发一个网站。 我需要使用JavaScript SDK连接用户登录 我决定在Javascript 等待app.js加载,然后在Next.js上运行组件,javascript,reactjs,async-await,next.js,Javascript,Reactjs,Async Await,Next.js,我正在使用Next.js开发一个网站。 我需要使用JavaScript SDK连接用户登录 我决定在\u app.js中初始化SDK,因为我认为它应该是服务器加载的第一个文件。 所以我在\u app.js componentDidMount () { window.mySDK = new userInfoSDK() console.log('_app') } async componentDidMount () { console.log('page') cons
\u app.js
中初始化SDK,因为我认为它应该是服务器加载的第一个文件。
所以我在\u app.js
componentDidMount () {
window.mySDK = new userInfoSDK()
console.log('_app')
}
async componentDidMount () {
console.log('page')
const loginStatus = await window.mySDK.getInfo()
}
在page.js
componentDidMount () {
window.mySDK = new userInfoSDK()
console.log('_app')
}
async componentDidMount () {
console.log('page')
const loginStatus = await window.mySDK.getInfo()
}
我得到的结果是window.mySDK没有定义
控制台显示
页面
_app.js
这意味着page.js
组件是在\u app.js
之前安装的吗
ComponentDiDMount只在客户端(而不是客户端)上调用一次
服务器),在初始渲染发生后立即执行。此时
在生命周期中,您可以访问孩子的任何引用(例如
访问底层DOM表示)。组件didmount()
子组件的方法在父组件的方法之前调用
组成部分
我认为对于您的用例,您可以在另一个REACT钩子或构造函数中初始化SDK,以确保它将在之前执行。根据componentDidMount
在render
之后运行。也就是说,这意味着它首先运行渲染,然后运行组件didmount
简单解决方案:
在\u app.js
中,在构造函数中编写代码:
constructor(props) {
super(props)
console.log('_app')
}
您不需要在page.js
中更改任何内容
在这种情况下,首先运行\u应用程序,然后运行其他页面
输出将是
_app.js
page
SDK将使用
窗口
对象,因此我认为它应该只在客户端运行。是的,但尝试使用进程。浏览器
检查您是否在浏览器或服务器中,而不是使用组件。提供的解决方案是否对您有效,或者您是否有其他与此相关的问题?