请考虑以下代码。 Wrapper1
呈现Wrapper2
,将Final
组件作为道具传递给它,以及Final
最终期望的几个道具,finalProp
和{{1} }。 w2prop
然后渲染传递给它的组件,将其所有props传递给该渲染组件。在这种情况下,Wrapper2
组件将由Final
呈现,并且它正在接收所需的道具。
然而,Flow并不理解这一点。我收到以下两个错误:
- property
Wrapper2
在对象类型中找不到属性另请参阅:React elementfinalProp
- property
醇>Wrapper2
在对象类型中找不到属性另请参阅:React elementw2prop
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.component
是Wrapper2
,那么我希望它能够了解Final
中所有内容的全部范围。< / p>
如果我将props
和finalProp
添加到w2prop
,那么Flow很高兴。但这不是首发,因为type Wrapper2T
应该是一个更高阶的组件,它不知道它最终呈现的组件。
我是否应该采用不同的方式来注释这些流量类型?或者用于创建&amp;的不同模式渲染这些组件?我认为我上面的内容是React中的标准模式,因此必须有一些解决方案。