流式类型不保存HOC中的静态道具

时间:2017-06-24 12:22:40

标签: reactjs flowtype higher-order-components

我遇到了一个问题,我可以将一个类或一个功能组件传递给我的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)
}

1 个答案:

答案 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{}