我遇到了一个问题,我可以将一个类或一个功能组件传递给我的HOC。在HOC中,我需要访问正在传递的组件(PAGE)上的静态属性。这里的问题是FLOW给我一个错误,说它无法在PAGE上找到传递给HOC的静态属性:
Error:(50, 21) Flow: property getInitialProps. Property not found in statics of React$Component
。
该错误来自以下代码中的这一行:
const pageProps =
(await Page.getInitialProps) && (await Page.getInitialProps(ctx))
任何帮助都将不胜感激 - 我的全文:
type DefaultProps = {
getInitialProps: (ctx:any) => any
}
type FunctionComponent<P> = (props: P) => ?React.Element<*>;
type ClassComponent<D, P, S> = Class<React.Component<D, P, S>>;
type Component<D, P> = FunctionComponent<P> | ClassComponent<D, P, any>;
export default <D: DefaultProps, P: {}, S: {}> (Page: Component<D, P>, title: string = '') => {
class standardLayout extends React.Component {
static async getInitialProps (ctx) {
// Flow can't read getInitialProps
const pageProps = Page.getInitialProps ? (await Page.getInitialProps(ctx)) : await Page.getInitialProps
return {
...pageProps,
currentUrl: ctx.pathname
}
}
render () {
return (
<div>
<Page {...this.props} />
</div>
)
}
}
return connect()(standardLayout)
}
答案 0 :(得分:2)
我发现摆脱此错误的最佳方法是检查Page.getInitialProps
是否为函数。一个简单的typeof Page.getInitialProps === 'function'
或try ... catch
为我工作,Flow很高兴。但我仍然不明白为什么:const pageProps = Page.getInitialProps ? (await Page.getInitialProps(ctx)) : await Page.getInitialProps
?您无法执行此操作await Page.getInitialProps
,只需将其替换为null
或{}