在 NextJS 中使用具有高阶函数的持久布局

IT技术 reactjs next.js
2022-07-31 01:28:30

我使用Adam Wathan 的方法在 Next 中使用持久布局。有没有办法让他们使用高阶函数?我不太确定 HOF 是如何工作的。

我的_app.js

function MyApp({ Component, pageProps }) {

    const Layout = Component.layout || (children => <>{children}</>)

    return (
        <Layout>
            <Component {...pageProps} />
        </Layout>
    )
}

示例页面如下所示

const Home = () => {

    return (
        <>
        ...
        </>
    )
}

Home.Layout = BaseLayout;

export const getServerSideProps = withAuthUserTokenSSR()()

export default withAuthUser()(Home)

如果我删除 HOF 布局工作正常,否则我得到:

错误:对象作为 React 子级无效(找到:带有键 {children} 的对象)。如果您打算渲染一组子项,请改用数组。

1个回答

您需要将该layout组件应用于高阶组件本身,因为它可能会包装您的原始Home组件并隐藏Home.layout起来。

const Home = () => {
    return (
        <></>
    )
}

const HomeWithAuth = withAuthUser()(Home)

HomeWithAuth.layout = BaseLayout;

export default HomeWithAuth

layout此外,请确保Layout在页面组件中以及在_app.