当父组件在其子组件中注入道具时,如何在 Typescript 中定义道具?

Posted

技术标签:

【中文标题】当父组件在其子组件中注入道具时,如何在 Typescript 中定义道具?【英文标题】:How to define props in Typescript when a parent component injects props in its children? 【发布时间】:2019-02-24 15:09:23 【问题描述】:

当一个组件克隆它的children注入props时,如何定义children的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;
;

<Parent>
  <Child />
</Parent>

子错误:injectedProp 丢失

【问题讨论】:

injectedProp 不包括在ChildProps 我忘了编辑 SO 的类型:p 使其可选或提供默认参数值 【参考方案1】:

这个 Code Pattern 不能在 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>

【讨论】:

以上是关于当父组件在其子组件中注入道具时,如何在 Typescript 中定义道具?的主要内容,如果未能解决你的问题,请参考以下文章

如何在单个文件 vue 组件中的初始化时将道具传递给 vue 组件(vue-loader 中的依赖注入)?

在道具更改时重新渲染功能组件

React 和 Redux:将父组件作为道具传递给其子组件是不是存在任何性能问题/可能的副作用

当父组件使用 ng-content Angular 时从子组件访问父组件

当父组件已经定义了样式时,CSS 未按预期在 React Native 中应用

使用传播属性时如何在子组件中获取道具