reactjs - 在带有 typescript 的函数组件中使用 useImperativeHandle,它会提示一些错误;
问题描述
类型'{焦点():无效;}' 缺少类型“HTMLDivElement”的以下属性:align、addEventListener、removeEventListener、accessKey 和 234 more.ts(2740) index.d.ts(1041, 79):预期类型来自 this 的返回类型签名。
这是组件代码:
import React, { forwardRef, useImperativeHandle, useRef } from "react";
type Ref = HTMLDivElement | null;
type SwiperProps = {
children?: React.ReactNode | null;
selectedIndex?: number;
};
const Swiper = forwardRef<Ref, SwiperProps>(
({ children = null }: SwiperProps, ref) => {
const inputRef = useRef(null);
useImperativeHandle(ref, () => ({
focus() {
inputRef.current.focus();
}
}));
return (
<div ref={ref}>
{children}
<input type="text" ref={inputRef} />
</div>
);
}
);
export default Swiper;
完整代码在代码沙箱中;
https://codesandbox.io/s/useimperativehandlecomponenterror-lowon
解决方案
您混淆了您的 refs 的类型定义:
import React, { forwardRef, useImperativeHandle, useRef } from "react";
type Ref = {
focus: () => void
} | null;
type SwiperProps = {
children?: React.ReactNode | null;
selectedIndex?: number;
};
const Swiper = forwardRef<Ref, SwiperProps>(
({ children = null }: SwiperProps, ref) => {
const inputRef = useRef<HTMLInputElement>(null);
useImperativeHandle(ref, () => ({
focus() {
inputRef.current?.focus();
}
}));
return (
<div>
{children}
<input type="text" ref={inputRef} />
</div>
);
}
);
export default Swiper;
您公开的类型应该描述您的命令句柄。
推荐阅读
- amazon-web-services - AWS s3api put-object-tagging 后如何避免 LESS 响应?
- php - Spatie\Permission with Spatie\Translatable 不适用于角色和权限模型 | 斯派蒂 | 拉拉维尔
- android - 如何搜索或过滤列表
来自 JSON 数组? - flutter - 颤振无法导入`flutter_webrtc.dart`
- python - 当我尝试使用 tkinter 将图像加载到画布上时,是什么导致错误“未知选项“pyimage1””?
- javascript - 试图从 Point A LLA 的角度将 Point B LLA 转换为 ECEF
- firebase - 从 Firebase 控制台手动删除文档而不删除子集合时,我应该怎么做才能触发 onDelete firebase 功能?
- python - 在python中将日期转换为列表
- docker - 一个运行 Apache 的容器内的多个站点:来自外部的虚拟主机?
- c# - 如何返回 DispatcherOperation
从模拟对象