Ram*_*zar 5 typescript reactjs tslint react-tsx
当组件克隆其子组件并向其注入 props 时,如何定义子组件的 props 类型?
我收到错误原因injectedProps预计在Child
const Parent: React.SFC<ParentProps> = ({ children }) => (
<div>
{React.cloneElement(children[0], { injectedProp: 'foo' })}
</div>
);
const Child: React.SFC<ChildProps> = ({ injectedProp }) => (
<div attr={injectedProp} />
);
type ChildProps = {
injectedProp: string;
};
Run Code Online (Sandbox Code Playgroud)
<Parent>
<Child />
</Parent>
Run Code Online (Sandbox Code Playgroud)
子项错误:
injectedProp缺失
这个代码模式无法在 TypeScript 中正确输入,而且如果你问我的话,它很丑陋。相反,考虑传递一个接受注入的 prop 并创建最终子元素的函数:
interface ParentProps {
children: (childProps: ChildProps) => React.ReactNode;
}
const Parent: React.SFC<ParentProps> = ({ children }) => (
<div>
{children({ injectedProp: 'foo' })}
</div>
);
const Child: React.SFC<ChildProps> = ({ injectedProp }) => (
<div title={injectedProp} />
);
type ChildProps = {
injectedProp: string;
};
function foo() {
return <Parent>
{childProps => <Child {...childProps} />}
</Parent>
}
Run Code Online (Sandbox Code Playgroud)