gpt4 book ai didi

reactjs - 将 getInitialProps 与 HOC 一起使用,其中也包含 getInitialProps

转载 作者:行者123 更新时间:2023-12-03 13:35:44 26 4
gpt4 key购买 nike

我用 withAuth HOC 包装了一个页面。在同一页面中,我还尝试调用 getInitialProps。如果我登录, getInitialProps 函数不会运行(尽管它表明我的 withAuth HOC 正在工作)。

我是否可以让 getInitialProps 使联系页面正常工作,并使用 withAuth HOC(它也有 getInitialProps 函数)?

联系方式

import Layout from "../components/Layout";
import { withAuth } from "../services/withAuth";

class Contact extends React.Component {
static async getInitialProps(ctx) {
console.log("@contact authenticated ", ctx);
return {};
}
render() {
return (
<Layout>
<p>hey there</p>
<a href="mailto:abc@gmail.com">abc@gmail.com</a>
</Layout>
);
}
}

export default withAuth(Contact);

withAuth HOC

import { ME } from "../graphql/queries";
import redirect from "../lib/redirect";

export const withAuth = C => {
class AuthComponent extends React.Component {
static async getInitialProps(ctx) {
const response = await ctx.apolloClient.query({ query: ME });
console.log("@withAuth ", response);
if (!response || !response.data || !response.data.me) {
redirect(ctx, "/");
return {
me: null
};
}

return {
me: response.data.me
};
}

render() {
return <C {...this.props} />;
}
}

return AuthComponent;
};

最佳答案

尝试在 HOC 的 getInitialProps 内调用 C.getInitialProps():

export const withAuth = C => {
class AuthComponent extends React.Component {
static async getInitialProps(ctx) {
const response = await ctx.apolloClient.query({ query: ME });

console.log("@withAuth ", response);

if (!response || !response.data || !response.data.me) {
redirect(ctx, "/");
return {
me: null
};
}

// Get component’s props
let componentProps = {}
if (C.getInitialProps) {
componentProps = await C.getInitialProps(ctx);
}

return {
me: response.data.me,
...componentProps
};
}

render() {
return <C {...this.props} />;
}
}

return AuthComponent;
};

我希望这会有所帮助。

关于reactjs - 将 getInitialProps 与 HOC 一起使用,其中也包含 getInitialProps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55869475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com