typescript - ReactNative Animated.ScrollView ref TypeScript 定义
问题描述
在 React Native 组件中,我有:<Animated.ScrollView ref={cardRef} ... />
.
当我将鼠标悬停在上面时,ref
我看到(JSX attribute) React.ClassAttributes<Animated.ScrollView>.ref?: React.LegacyRef<Animated.ScrollView> | undefined
了,所以我像这样创建了 ref,const cardRef = useRef<React.RefObject<Animated.ScrollView> | undefined>(undefined);
但是这样做cardRef.current?.scrollTo({ x: newOffset });
会给我一个警告scrollTo
:Property 'scrollTo' does not exist on type 'RefObject<ScrollView>'
。
我怎么知道正确的 TS 定义应该是什么?有没有办法或者它总是一个猜谜游戏?
解决方案
你快到了。泛型类型参数 onuseRef
用于 this 所引用的类型。换句话说,.current
属性的类型。您不需要包含RefObject
在泛型中,因为它已经知道它创建了一个RefObject
. 它只需要知道它正在创建什么类型。RefObject
您当前的类型是说它正在创建一个RefObject
其.current
属性是 aRefObject
并且 ref 的.current
属性是ScrollView
.
通过查看类型声明和检查错误消息,您会发现一个小技巧,这null
是任何元素 ref 的可接受值。因此,您可以将null
其用作初始值,而不必包含 | undefined
在类型中。
你应该改变:
const cardRef = useRef<React.RefObject<Animated.ScrollView> | undefined>(undefined);
到:
const cardRef = useRef<Animated.ScrollView>(null);
推荐阅读
- html -
- 在具有巨大字体大小的 a 内
- c# - Does `this.SomeMethod` passed as Func argument capture `this`?
- google-sheets - 查询:在 ARRAY_LITERAL 中,数组文字缺少一行或多行的值
- c++ - 如何裁剪图像的边框opencv
- excel - Excel VBA循环并查找特定范围并连接2个单元格值并删除空单元格
- r - r 中的 library()/require() 和 source() 有什么区别?
- python - 使用带有 Python 的 SPCY 库的实体关系
- jsp - 无法从 jsp 调用 servlet
- python - Python如何ctrl c终止python中的线程?
- .net - 从 .Net 应用程序到 AWS API Gateway 的 HTTP POST 请求未按预期工作