我在这里有一个 HOC 包装的功能组件
export default wrapperHoc( function myComponent ({ someProps }){
return(
<div/>
)
})
我该怎么getInitialProps
写myComponent
?
我应该打电话进来myComponent
吗?getInitialProps
wrapperHoc
我在这里有一个 HOC 包装的功能组件
export default wrapperHoc( function myComponent ({ someProps }){
return(
<div/>
)
})
我该怎么getInitialProps
写myComponent
?
我应该打电话进来myComponent
吗?getInitialProps
wrapperHoc
const YourNewComponent = wrapperHoc(...)
YourNewComponent.getInitialProps = async (ctx) => {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return { stars: json.stargazers_count }
}
export default YourNewComponent
我应该在 wrapperHoc 中调用 myComponent 的 getInitialProps 吗?
是的,你在正确的轨道上。
next.js文档说`getInitialProps 不能在子组件中使用,只能在每个页面的默认导出中使用。
要解决此限制,您可以在 myComponent 中编写代码,然后在 wrapperHoc 中getInitialProps
调用 myComponent 。getInitialProps
并且 wrapperHocgetInitialProps
也应该以这种方式由上层组件调用。
您可以随意调整getInitialProps()
以添加其他属性并调整render()
以添加其他 html 元素。
export default (WrappedComponent) => (class WrapperHOC extends React.Component {
static async getInitialProps(args) {
return WrappedComponent.getInitialProps ? await WrappedComponent.getInitialProps(args) : {};
}
render() {
return (
<WrappedComponent {...this.props} />
);
}
});