我正在处理一个React + TypeScript项目,在该项目中,我引入了提供的“如何测量DOM节点?”示例,但我似乎无法让React的类型确认这样一个场景,即有人将useCallback的返回值作为ref传入。如果您打开它,您应该会在此行中看到TypeScript错误指示符:
useCallback
ref
<div ref={ref} className="App">
应该如何设置类型以使其有效,或者@types/react包中是否缺少某些东西?
@types/react
blpfk2vs1#
首先将null添加到useCallback中的节点类型,然后将as const添加到返回的数组中,这将使返回的数组类型化为元组(记住类型的顺序),而不是使其成为多个类型的数组
null
as const
function useClientRect() { const [rect, setRect] = useState<DOMRect>(); const ref = useCallback((node: HTMLElement | null) => { if (node !== null) { setRect(node.getBoundingClientRect()); } }, []); return [rect, ref] as const; }
gupuwyp22#
将useClientRect挂钩的返回类型设置为[ClientRect | undefined, (node: HTMLDivElement) => void],并将useCallback的参数类型更改为HTMLDivElement:
useClientRect
[ClientRect | undefined, (node: HTMLDivElement) => void]
HTMLDivElement
// packages import { useCallback, useState } from "react"; function useClientRect(): [ ClientRect | undefined, (node: HTMLDivElement) => void ] { const [rect, setRect] = useState<ClientRect>(); const ref = useCallback((node: HTMLDivElement) => { if (node !== null) { setRect(node.getBoundingClientRect()); } }, []); return [rect, ref]; } export default useClientRect;
kse8i1jr3#
在你的use-client-react中,你传递了一个不存在的ClientRect类型,下面的代码对我来说很好用。
use-client-react
ClientRect
import { useCallback, useState } from "react"; function useClientRect() { const [rect, setRect] = useState(); const ref = useCallback((node: HTMLDivElement) => { if (node !== null) { setRect(node.getBoundingClientRect()); } }, []); return [rect, ref]; } export default useClientRect;
3条答案
按热度按时间blpfk2vs1#
首先将
null
添加到useCallback
中的节点类型,然后将as const
添加到返回的数组中,这将使返回的数组类型化为元组(记住类型的顺序),而不是使其成为多个类型的数组gupuwyp22#
将
useClientRect
挂钩的返回类型设置为[ClientRect | undefined, (node: HTMLDivElement) => void]
,并将useCallback
的参数类型更改为HTMLDivElement
:kse8i1jr3#
在你的
use-client-react
中,你传递了一个不存在的ClientRect
类型,下面的代码对我来说很好用。