样式化组件React HTML元素工厂

新世界

我想创建一个处理具有相同属性/逻辑的多个HTML元素的组件。

import React from 'react';
import styled from 'styled-components';

interface GridProps {
  htmlElement: 'div' | 'main' | 'header',
}

const GridFactory = (props: GridProps) => {
  switch (props.htmlElement) {
    case 'header':
      return styled.header``;
    case 'main':
      return styled.main``;
    case 'div': default :
      return styled.div``;
  }
}

export const Test = () => (
  <GridFactory htmlElement='div'>
    <p>content...</p>
  </GridFactory>
)

它因该错误而失败:

Type '{ children: Element; htmlElement: "div"; }' is not assignable to type 'IntrinsicAttributes & GridProps'.
  Property 'children' does not exist on type 'IntrinsicAttributes & GridProps'.

尝试过的第一把戏

向GridProps添加一个显式的子道具:

interface GridProps {
  htmlElement: 'div' | 'main' | 'header',
  children?: React.ReactNode | React.ReactNode[];
}

它给出了相应的错误:

'GridFactory' cannot be used as a JSX component.
  Its return type 'StyledComponent<"header", DefaultTheme, {}, never> | StyledComponent<"div", DefaultTheme, {}, never>' is not a valid JSX element.
    Type 'StyledComponent<"header", DefaultTheme, {}, never>' is not assignable to type 'Element | null'.
      Type 'String & StyledComponentBase<"header", DefaultTheme, {}, never> & NonReactStatics<never, {}>' is missing the following properties from type 'Element': type, props, key

我该如何实现?

tmhao2005

由于您的styled.head退货组件类型不是,React.Element所以您可以如下进行改进:

将组件的返回类型指定为无状态功能组件React.SFC,您还可以从中受益,无需指定childrenprop,因为它是该类型的一部分SFC

const GridFactory: React.SFC<GridProps> = (props) => { ...

然后将样式化的组件分配为功能组件,例如Header

const Header: React.SFC = styled.header``;

总结起来,完整的代码将是:

interface GridProps {
  htmlElement: 'div' | 'main' | 'header',
}

const Header: React.SFC = styled.header``;

const GridFactory: React.SFC<GridProps> = (props) => {
  switch (props.htmlElement) {
    case 'header':
      return <Header />;

    // More to come

    default: return null
  }
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

React&Typescript,样式化的组件和子元素

来自分类Dev

React.js和样式化组件-样式化输入,其中包含()元素的错觉

来自分类Dev

使用样式化的组件在组件/元素之间共享样式

来自分类Dev

如何使用样式化组件为React Native中的最后一个子元素设置样式

来自分类Dev

从主 SCSS 样式化 Angular 组件的元素

来自分类Dev

使用组件函数样式化HTML对象

来自分类Dev

使用react-testing-library对样式化组件的直接子元素进行单元测试时,“在传递的组件上找不到样式规则”

来自分类Dev

使用样式化组件时如何保留原始html元素的道具?

来自分类Dev

React无法识别DOM元素上的`isActive`属性-样式组件

来自分类Dev

使用React中的条件在单独的组件中设置元素的样式

来自分类Dev

hoc react组件中的样式化组件

来自分类Dev

如何从内联样式或样式化组件中的graphQl查询中获取变量到伪元素中

来自分类Dev

如何使用样式化的组件为焦点上的<input>元素设置样式?

来自分类Dev

使用样式化的组件和Material UI时出现打字稿和夹板的问题:React无法识别DOM元素上的showText属性。

来自分类Dev

无法将样式应用于React.js中的样式组件元素

来自分类Dev

样式化HTML元素的正确方法

来自分类Dev

如何直接样式化html元素(内联)?

来自分类Dev

React,样式化组件,打字稿错误

来自分类Dev

在React和TypeScript中使用JavaScript样式化元素

来自分类Dev

如何使用样式化组件React重叠样式?

来自分类Dev

访问React组件内的HTML元素

来自分类Dev

在React组件的HTML元素内添加属性

来自分类Dev

如何为未出现在初始渲染中的元素使用样式化组件?

来自分类Dev

使用样式化组件扩展常规的React组件

来自分类Dev

在React中设置样式化的组件,找到相应的组件

来自分类Dev

如何在React组件中使用样式化组件

来自分类Dev

嵌入式React + JSS组件:如何保护<button>,<p>等通用元素不包含页面样式?

来自分类Dev

React.js-功能组件-DOM操作,更改元素的样式

来自分类Dev

React useState:保留元素工厂实例之间的状态

Related 相关文章

  1. 1

    React&Typescript,样式化的组件和子元素

  2. 2

    React.js和样式化组件-样式化输入,其中包含()元素的错觉

  3. 3

    使用样式化的组件在组件/元素之间共享样式

  4. 4

    如何使用样式化组件为React Native中的最后一个子元素设置样式

  5. 5

    从主 SCSS 样式化 Angular 组件的元素

  6. 6

    使用组件函数样式化HTML对象

  7. 7

    使用react-testing-library对样式化组件的直接子元素进行单元测试时,“在传递的组件上找不到样式规则”

  8. 8

    使用样式化组件时如何保留原始html元素的道具?

  9. 9

    React无法识别DOM元素上的`isActive`属性-样式组件

  10. 10

    使用React中的条件在单独的组件中设置元素的样式

  11. 11

    hoc react组件中的样式化组件

  12. 12

    如何从内联样式或样式化组件中的graphQl查询中获取变量到伪元素中

  13. 13

    如何使用样式化的组件为焦点上的<input>元素设置样式?

  14. 14

    使用样式化的组件和Material UI时出现打字稿和夹板的问题:React无法识别DOM元素上的showText属性。

  15. 15

    无法将样式应用于React.js中的样式组件元素

  16. 16

    样式化HTML元素的正确方法

  17. 17

    如何直接样式化html元素(内联)?

  18. 18

    React,样式化组件,打字稿错误

  19. 19

    在React和TypeScript中使用JavaScript样式化元素

  20. 20

    如何使用样式化组件React重叠样式?

  21. 21

    访问React组件内的HTML元素

  22. 22

    在React组件的HTML元素内添加属性

  23. 23

    如何为未出现在初始渲染中的元素使用样式化组件?

  24. 24

    使用样式化组件扩展常规的React组件

  25. 25

    在React中设置样式化的组件,找到相应的组件

  26. 26

    如何在React组件中使用样式化组件

  27. 27

    嵌入式React + JSS组件:如何保护<button>,<p>等通用元素不包含页面样式?

  28. 28

    React.js-功能组件-DOM操作,更改元素的样式

  29. 29

    React useState:保留元素工厂实例之间的状态

热门标签

归档