Fam*_*8er 10 typescript reactjs tsx
我正在尝试useRef与 TypeScript一起使用,但遇到了一些麻烦。
用我的RefObject(我假设)我需要访问current. (即node.current)
我已经尝试了以下
const node: RefObject<HTMLElement> = useRef(null);const node = useRef<HTMLElement | null>(null);但是当我去设置时,ref我总是被告知 Xis not assignable to type 'LegacyRef<HTMLDivElement> | undefined'.
return <div ref={ node }>{ children }</div>
编辑:这不应该仅限于任何一种类型的元素,所以不仅仅是 HTMLDivElement | HTMLFormElement | HTMLInputElement
编辑:这应该作为一个例子
import React, { useRef, RefObject } from 'react';
function Test()
{
// const node = useRef(null);
// const node: RefObject<HTMLElement> = useRef(null);
const node = useRef<HTMLElement | null>(null);
if (
node &&
node.current &&
node.current.contains()
){ console.log("current accessed")}
return <div ref={ node }></div>
}
Run Code Online (Sandbox Code Playgroud)
She*_*ith 210
上述方法都不适合我,但事实证明解决方案非常简单......
我做错的只是没有明确地将“null”作为 useRef 初始化中的参数(它需要 null,而不是未定义)。另外,您不能使用“HTMLElement”作为您的引用类型,您必须更具体,所以对我来说它是“HTMLDivElement”)。
所以我的工作代码是这样的:
const ref = useRef<HTMLDivElement>(null);
return <div ref={ref}> Some Content... </div>
Run Code Online (Sandbox Code Playgroud)
只需导入 React:
import React, { useRef } from 'react';
function Test() {
const node = useRef<HTMLDivElement>(null);
if (
node &&
node.current &&
node.current.contains()
){ console.log("current accessed")}
return <div ref={node}></div>
}
Run Code Online (Sandbox Code Playgroud)
我做了一个更新。使用HTMLDivElement作为泛型参数代替HTMLElement | null。此外,contains期待一个论点。
UPDATE
useRef需要 DOM 元素类型的通用参数。您不需要使用,| null因为RefObject已经知道它current可能为空。
看下一个类型:
interface RefObject<T> {
readonly current: T | null
}
Run Code Online (Sandbox Code Playgroud)
TS 和 React 足够聪明,可以确定您的 ref 可能为空
我来这里寻求 iframe 参考的帮助。也许这个解决方案会帮助其他正在寻找同样东西的人。我HTMLDivElement用HTMLIFrameElement这样替换:
const node = useRef<HTMLIFrameElement>(null);
Run Code Online (Sandbox Code Playgroud)
小智 5
同样代表<svg>元素:
const ref = useRef<SVGSVGElement>(null)
...
<svg ref={ref} />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7184 次 |
| 最近记录: |