reactjs - DraggableFlatList onRef 使用 Typescript 获取错误类型
问题描述
我在 ReactNative 中使用 react-native-draggable-flatlist。我对 FlatList 的引用感兴趣,以便可以对其执行 scrollToIndex 。使用以下代码:
import React, {
useEffect, createRef, useRef,
} from 'react'
import { ScrollView, FlatList } from 'react-native-gesture-handler'
import DraggableFlatList, {
RenderItemParams, DragEndParams,
} from "react-native-draggable-flatlist"
export default function TasksList(props: Props) {
const ref = createRef<DraggableFlatList<ITask>>()
const flatListRef = useRef<FlatList<ITask> | null>(null)
return (
<DraggableFlatList
ref={ref}
onRef={flatListRef}
...
)
}
我收到以下打字稿错误:
类型 'MutableRefObject<(ComponentClass<FlatListProps & NativeViewGestureHandlerProps & RefAttributes, any> & { ...; }) | (函数组件<...> & { ...; }) | null>' 不可分配给类型 '(ref: RefObject<FlatList>) => void'。类型 'MutableRefObject<(ComponentClass<FlatListProps & NativeViewGestureHandlerProps & RefAttributes, any> & { ...; }) | (函数组件<...> & { ...; }) | null>' 不匹配签名 '(ref: RefObject<FlatList>): void'。预期的类型来自属性 'onRef',它在类型 'IntrinsicAttributes & IntrinsicClassAttributes<DraggableFlatList> & Pick<Readonly<Modify<FlatListProps, { ...; } & 部分<...>>> & 只读<...>, "ItemSeparatorComponent" | ... 150 更多 ... | “孩子”> & 部分<...> & 部分<...>'
如何修复错误以便我可以使用 ref/onRef?
解决方案
我相信你没有得到什么onRef
道具期望到达这里。如果您仔细查看错误,它会说类似这样的内容:
'MutableRefObject<FlatList<ITask> | null>' is not
assignable to type '(ref: RefObject<FlatList<ITask>>) => void'.
因此,它显然需要一个函数而不是一个RefObject
. 您还可以参考源代码来验证:
...
onRef?: (ref: React.RefObject<FlatList<T>>) => void;
...
它需要一个函数,该函数将被赋予RefObject<FlatList<T>>
类型的 ref。
您可以将代码改写为:
....
const ref = createRef<DraggableFlatList<ITask>>()
const flatListRef = useRef<React.RefObject<FlatList<ITask>> | null>(null)
return (
<DraggableFlatList
ref={ref}
onRef={(ref) => { flatListRef.current = ref }}
因此,在flatListRef
ref内部,current
您可以通过它的属性访问底层的FlatList
ref
.
推荐阅读
- android - Android webview检测特定页面更改
- go - 纹理如何在OpenGL3中显示为颜色而不是灰度?
- javascript - 当我尝试创建一个供事件侦听器读取的元素时,控制台抛出未定义
- visual-studio - Visual Studio 2019 社区版 16.7.0 挂起
- python - 如何在python tkinter中向复选框添加垂直滚动条?
- php - Laravel 查询生成器仅获取具有特定进度的项目
- java - 如何根据camunda中的processInstanceId获取taskId
- java - 从java发送重定向到Angular 8
- visual-studio - 在 Visual Studio 2019 上,如何在 C++ Debug 程序中调试纯 C++ 和 CLI C++?
- python - 从字典列表中添加新列