如何使用打字稿在Hoc中为HTML元素使用Ref

时间:2020-10-13 08:11:23

标签: reactjs typescript react-ref react-hoc

这是我的代码

import React, { FC, InputHTMLAttributes, useEffect, useRef } from 'react';

type TElementType = HTMLInputElement | HTMLTextAreaElement;
type TElementWithAttributes = InputHTMLAttributes<HTMLInputElement>;

interface Props {
  submitTouched: boolean;
}

const withInput = (Comp: FC<TElementWithAttributes>): FC<Props> => props => {
  const { submitTouched } = props;

  const refValue: React.RefObject<TElementType> = useRef(null);

  const updateErrors = (val: string) => {
    // handle errors
  };

  useEffect(() => {
    if (submitTouched && refValue.current) {
      updateErrors(refValue.current.value);
    }
  }, [submitTouched]);

  const InputOrTextarea = (
    <>
      <Comp name="somename" type="text" value="somevalue" ref={refValue} />
    </>
  );
  return InputOrTextarea;
};

export default withInput;

我在ref = {refValue}上遇到错误

输入'{name:string;类型:字符串;值:字符串; ref:RefObject; }'不能分配给'IntrinsicAttributes&TElementWithAttributes&{children ?: ReactNode; }'。 属性'ref'在类型'IntrinsicAttributes&TElementWithAttributes&{children ?: ReactNode; }'。

1 个答案:

答案 0 :(得分:0)

refReact.DetailedHTMLProps添加到html道具中,这就是为什么您会遇到错误。试试:

type TElementType = HTMLInputElement | HTMLTextAreaElement;
type TElementWithAttributes = React.DetailedHTMLProps<InputHTMLAttributes<TElementType>, TElementType>

Playground Link