如何在React中引用组件的props?

贾夫·帕克

我有一个可以接受另一个组件作为道具的组件。不管它有其他什么道具,它都会将它们传递给子组件。那就是它的样子:

interface FormGroupProps extends BasicInputProps<any> {
  label: string
  name: string
  Component: ComponentType<BasicInputProps<any>>
}

export const FormGroup: SFC<FormGroupProps> = ({
  label,
  Component,
  ...props
}) => (
  <RBSFormGroup>
    <Label>{label}</Label>
    <Component {...props} />
  </RBSFormGroup>
)

您可以看到,在FormGroupProps我告诉TS的情况下,Component只接受某种类型的道具。这是不理想的,因为有时我需要传递不一定与该签名匹配的组件。

我可能会写ComponentType<any>,但这太宽松了。我希望能够编写类似的内容ComponentType<Component['props']>,但据我所知没有这样的东西。

有没有一种方法可以引用元件props类型?还是我需要手动传递一个泛型来实现?

迪伦·沃克

@types/react响应React 16.6而引入的新类型包括以下类型:

type ComponentProps<T extends keyof JSX.IntrinsicElements | JSXElementConstructor<any>> =
    T extends JSXElementConstructor<infer P>
        ? P
        : T extends keyof JSX.IntrinsicElements
            ? JSX.IntrinsicElements[T]
            : {};

type ComponentPropsWithRef<T extends ElementType> =
    T extends ComponentClass<infer P>
        ? PropsWithoutRef<P> & RefAttributes<InstanceType<T>>
        : PropsWithRef<ComponentProps<T>>;

type ComponentPropsWithoutRef<T extends ElementType> = PropsWithoutRef<ComponentProps<T>>;

其中引用了组件的道具类型。您应该能够使用以下新类型之一实现所需的界面:

interface FormGroupProps {
    label: string;
    name: string;
    Component: React.ComponentProps<typeof Component>;
}

如果您要避免在各处导出prop接口,或者要从不导出prop接口的库中提取prop接口,这将非常方便。另外,与不同Component['props'],它也适用于功能组件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

了解如何在React组件中引用属性

来自分类Dev

如何在scalsjs-react中获取对组件的引用?

来自分类Dev

如何在React 0.12+中处理组件参考变量和props?

来自分类Dev

使用酶进行测试时,如何在 React 组件中模拟“this.props”?

来自分类Dev

如何在 React JS 中的 MultiSelect 组件的 props 处分配数组

来自分类Dev

如何在React样式组件中使用this.props

来自分类Dev

如何在父组件中访问子组件的引用

来自分类Dev

如何在功能组件中访问props.match.params

来自分类Dev

React:如何访问this.props.children中的引用

来自分类Dev

如何在React中不使用props的情况下将函数传递给组件的层次结构?

来自分类Dev

如何在React组件中访问JSON?

来自分类Dev

如何在React中测试类组件

来自分类Dev

如何在react中呈现默认组件

来自分类Dev

如何在React中渲染递归组件?

来自分类Dev

如何在 React 中删除异步组件?

来自分类Dev

如何在 React 中构建专门的组件

来自分类Dev

如何在组件类中获取ngForm变量引用?

来自分类Dev

如何在Angular组件中创建HtmlElement引用?

来自分类Dev

如何在SwiftUI组件中引用强调色?

来自分类Dev

如何在Java组件中引用Mule主目录

来自分类Dev

如何在Angular2中引用组件?

来自分类Dev

如何将props传递给在React中作为props传递的组件?

来自分类Dev

如何在React中从父组件调用子组件的方法

来自分类Dev

如何在React Native中让组件控制同级组件?

来自分类Dev

如何在React TypeScript中实现e和props?

来自分类Dev

在 Meteor+React 中,如何在父 React 组件中渲染子 React 组件?

来自分类Dev

如何使用react和typescript访问react功能组件中的props?

来自分类Dev

如何在Angular模板中获取元素引用而不是组件引用

来自分类Dev

引用属性作为 Vue.js 组件中的 props

Related 相关文章

  1. 1

    了解如何在React组件中引用属性

  2. 2

    如何在scalsjs-react中获取对组件的引用?

  3. 3

    如何在React 0.12+中处理组件参考变量和props?

  4. 4

    使用酶进行测试时,如何在 React 组件中模拟“this.props”?

  5. 5

    如何在 React JS 中的 MultiSelect 组件的 props 处分配数组

  6. 6

    如何在React样式组件中使用this.props

  7. 7

    如何在父组件中访问子组件的引用

  8. 8

    如何在功能组件中访问props.match.params

  9. 9

    React:如何访问this.props.children中的引用

  10. 10

    如何在React中不使用props的情况下将函数传递给组件的层次结构?

  11. 11

    如何在React组件中访问JSON?

  12. 12

    如何在React中测试类组件

  13. 13

    如何在react中呈现默认组件

  14. 14

    如何在React中渲染递归组件?

  15. 15

    如何在 React 中删除异步组件?

  16. 16

    如何在 React 中构建专门的组件

  17. 17

    如何在组件类中获取ngForm变量引用?

  18. 18

    如何在Angular组件中创建HtmlElement引用?

  19. 19

    如何在SwiftUI组件中引用强调色?

  20. 20

    如何在Java组件中引用Mule主目录

  21. 21

    如何在Angular2中引用组件?

  22. 22

    如何将props传递给在React中作为props传递的组件?

  23. 23

    如何在React中从父组件调用子组件的方法

  24. 24

    如何在React Native中让组件控制同级组件?

  25. 25

    如何在React TypeScript中实现e和props?

  26. 26

    在 Meteor+React 中,如何在父 React 组件中渲染子 React 组件?

  27. 27

    如何使用react和typescript访问react功能组件中的props?

  28. 28

    如何在Angular模板中获取元素引用而不是组件引用

  29. 29

    引用属性作为 Vue.js 组件中的 props

热门标签

归档