通过流式高阶有序组件传递道具时出现流错误

时间:2017-04-06 23:34:18

标签: javascript reactjs higher-order-functions flowtype higher-order-components

请考虑以下代码。 Wrapper1呈现Wrapper2,将Final组件作为道具传递给它,以及Final最终期望的几个道具,finalProp和{{1} }。 w2prop然后渲染传递给它的组件,将其所有props传递给该渲染组件。在这种情况下,Wrapper2组件将由Final呈现,并且它正在接收所需的道具。

然而,Flow并不理解这一点。我收到以下两个错误:

  
      
  1. property Wrapper2在对象类型中找不到属性另请参阅:React element finalProp
  2.   
  3. property Wrapper2在对象类型中找不到属性另请参阅:React element w2prop
  4.   
Wrapper2

根据错误消息,Flow显然明白type FinalT = { finalProp: number, w2prop: number, }; function Final(props: FinalT): React.Element<*> { return ( <div> {props.finalProp} {props.w2prop} </div> ); } export default function Wrapper1(): React.Element<*> { return ( <Wrapper2 component={Final} finalProp={7} w2prop={7} /> ); } type Wrapper2T = { component: (*) => React.Element<*>, }; function Wrapper2(props: Wrapper2T): React.Element<*> { const Cmp = props.component; return <Cmp {...props} />; } 正在呈现Final。然而,它没有意识到正在提供必要的道具。我觉得这很奇怪。如果它可以告诉Wrapper2中的props.componentWrapper2,那么我希望它能够了解Final中所有内容的全部范围。< / p>

如果我将propsfinalProp添加到w2prop,那么Flow很高兴。但这不是首发,因为type Wrapper2T应该是一个更高阶的组件,它不知道它最终呈现的组件。

我是否应该采用不同的方式来注释这些流量类型?或者用于创建&amp;的不同模式渲染这些组件?我认为我上面的内容是React中的标准模式,因此必须有一些解决方案。

0 个答案:

没有答案