【发布时间】:2021-12-23 21:01:31
【问题描述】:
import { useSession } from 'next-auth/react'
import { LoginPage } from '@/client/components/index'
const Homepage = () => {
const session = useSession()
if (session && session.data) {
return (
<>
<div>Homepage</div>
</>
)
}
return <LoginPage />
}
export default Homepage
基本上,我不想在每一页上写相同的 Login 和 useSession() 样板。
我想要类似的东西:
import { withAuth } from '@/client/components/index'
const Homepage = () => {
return (
<>
<div>Homepage</div>
</>
)
}
export default withAuth(Homepage)
或者如果可能的话withAuthHook?
我目前做了以下事情:
import React from 'react'
import { useSession } from 'next-auth/react'
import { LoginPage } from '@/client/components/index'
export const withAuth = (Component: React.Component) => (props) => {
const AuthenticatedComponent = () => {
const session = useSession()
if (session && session.data) {
return <Component {...props} />
}
return <LoginPage />
}
return AuthenticatedComponent
}
但我得到一个错误:
JSX 元素类型“组件”没有任何构造或调用 signatures.ts(2604)
如果我使用React.ComponentType,如下面的答案中所述,我会收到一条错误消息:
TypeError: (0 , client_components_index__WEBPACK_IMPORTED_MODULE_0_.withAuth) 不是函数
【问题讨论】:
标签: javascript reactjs react-hooks next.js higher-order-components