在渲染器中使用不同的html元素时,如何在TypeScript中使用React.forwardRef

沙古

我正在努力使用一个非常简单的组件来显示跨度或<br>取决于道具:

import * as React from 'react';

type Props = {value: string}

function LetterRenderer({value = ''}: Props, ref: React.Ref<HTMLElement>) {
    switch(value) {
      case '\n': return (<br ref={ref} />);
      default: return (<span ref={ref}>{value}</span>);
    }
}

const Letter = React.forwardRef<HTMLElement, Props>(LetterRenderer);
Letter.displayName = 'Letter';
export default Letter;

在上<br ref={ref} />,第二个ref用以下错误消息加下划线:

Type 'Ref<HTMLElement>' is not assignable to type 'string | ((instance: HTMLBRElement | null) => void) | RefObject<HTMLBRElement> | null | undefined'.
  Type 'RefObject<HTMLElement>' is not assignable to type 'string | ((instance: HTMLBRElement | null) => void) | RefObject<HTMLBRElement> | null | undefined'.
    Type 'RefObject<HTMLElement>' is not assignable to type 'RefObject<HTMLBRElement>'.
      Property 'clear' is missing in type 'HTMLElement' but required in type 'HTMLBRElement'.ts(2322)
lib.dom.d.ts(6336, 5): 'clear' is declared here.
index.d.ts(106, 9): The expected type comes from property 'ref' which is declared here on type 'DetailedHTMLProps<HTMLAttributes<HTMLBRElement>, HTMLBRElement>'

我应该如何解决?

kmui2
function LetterRenderer({value = ''}: Props, ref: React.Ref<HTMLElement>) {
// ...

您的ref道具可以接受,HTMLElement但您真正想要的是HTMLBRElement | HTMLSpanElement因为分别ref传递给<br><span>ref属性是React.Ref<HTMLBRElement>React.Ref<HTMLSpanElement>

将ref属性更改为

ref: React.Ref<HTMLBRElement | HTMLSpanElement>

需要注意的是HTMLBRElementHTMLSpanElement双方继承HTMLElement而不是周围的其他方式; HTMLElement没有clear属性,但是HTMLBRElement有。

更新:

因为<br>的和<span>ref属性只接受React.Ref<HTMLBRElement>React.Ref<HTMLSpanElement>分别ref需要被内联相应铸造。

<br ref={ref as React.Ref<HTMLBRElement>} />

<span ref={ref as React.Ref<HTMLSpanElement>}>{text}</span>

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 React 组件中使用 forwardRef?

如何在React Native中使用React.forwardRef()

如何在基于类的组件中使用React.forwardRef?

如何在 React Native 的功能组件中使用 forwardRef?

无法在React最终形式中使用forwardRef

使用forwardRef传递多个元素

如何使用ForwardRefRenderFunction导出forwardRef

在React.forwardRef中使用ref.current

直接在render函数中使用React.forwardRef

TypeScript和react-native的ForwardRef错误

React.ForwardRef TypeScript组件类型错误

结合使用ForwardRef和Link组件

对元素位置反应UseRef和forwardRef问题

React.forwardRef导致样式组件错误

React forwardRef:ref和其他道具

React forwardref 电流始终为空

返回输入或textArea的元素的React / Typescript forwardRef类型

我如何让类型检查与 React forwardRef 一起使用

在TypeScript中将forwardRef组件与子代一起使用

使用NavLink时ListItem组件中的ForwardRef错误

使用babel7时,buildRefactRelayContainer上的forwardRef不是函数

使用React.forwardRef与自定义ref属性的价值

使用forwardRef创建的React组件上的类型错误

TS/React 使用 forwardRef 将 ref 传递给组件

使用Typescript进行反应-使用React.forwardRef时的泛型

React 父組件道具無法在子組件中使用 forwardRef 道具訪問

聚焦单选按钮时,React useRef / forwardRef无法正常工作

如何使用TypeScript在React Native中将ForwardRef与FunctionComponent一起使用

如何在 forwardRef 中不傳遞參數?