【发布时间】:2019-10-11 23:48:39
【问题描述】:
在_app.js 中,我将MyApp 包裹在一个获取用户状态的HOC(Higer Order Component)中。
import AuthHoC from '../utils';
import App from 'next/app';
class MyApp extends App {
render() {
const { Component, pageProps, isAuthenticated, idToken } = this.props;
return (
<Component
{...pageProps}
isAuth={isAuthenticated} // Given by AuthHOC
idToken={idToken} // Given by AuthHOC
/>
);
}
}
export default AuthHoC(MyApp);
在我的页面中,我想通过getInitialProps 获取状态。
class Page extends React.Component {
...
render() {
return (
<Layout>...</Layout>
);
}
}
Page.getInitialProps = async (ctx) => {
console.log('How can I access this -> isAuthenticated');
// if user is not auth, redirect or pass.
return {}
};
export default Page;
如何在Page.getInitialProps 中获取isAuthenticated?
当然,我可以使用ComponentDidMount() 根据用户的状态进行重定向,但是加载时间稍长,他们可以在Router.push('/') 触发之前看到页面。这就是为什么我认为改用getInitialProps 会更合适。
【问题讨论】:
-
为什么
getInitialProps不在课堂内? -
@JosephD。它也可以在里面使用
static async getInitialProps(ctx) {...},在这个问题上没有太大的改变,我只是为了可读性把它分开了。 -
如何在静态方法中访问
this? -
@DhananjaiPai 我知道我不能,我正在寻找访问
isAuthenticated的方法。这就是我打开这篇文章的原因。 -
@JosephD。这就是我想知道的,为了访问
ctx,我需要以某种方式定义它。
标签: javascript reactjs next.js