React Native中FlashList的renderItem属性类型警告修复咨询
修复FlashList renderItem类型不兼容警告
问题根源是你使用了React Native核心库的ListRenderItem类型,但FlashList有自己的ListRenderItem类型定义,二者的ListRenderItemInfo结构不一致——FlashList的版本不包含必填的separators属性,导致类型不匹配。
修复步骤:
- 替换
ListRenderItem的导入来源:移除从react-native导入的ListRenderItem,改为从@shopify/flash-list导入它的专属类型。 - 更新
renderItem的类型标注:把renderItem的类型改为FlashList提供的ListRenderItem<Pokemon>。
修改后的完整代码:
import { View, Text, ScrollView, TouchableOpacity, StyleSheet, Image, ActivityIndicator } from 'react-native' import React from 'react' import { Link } from 'expo-router' import { Pokemon, getPokemon } from '@/api/pokeapi' import { Ionicons } from '@expo/vector-icons'; import { useQuery } from '@tanstack/react-query'; import { FlashList, ListRenderItem } from "@shopify/flash-list"; // 从FlashList导入ListRenderItem const Page = () => { const pokemonQuery = useQuery({ queryKey: ["pokemon"], queryFn: getPokemon, refetchOnMount: false }) // 使用FlashList的ListRenderItem类型 const renderItem: ListRenderItem<Pokemon> = ({ item }) => { return ( <Link href={`/(pokemon)/${item.id}`} key={item.id} asChild> <TouchableOpacity> <View style={styles.item}> <Image source={{ uri: item.image }} style={styles.preview} /> <Text style={styles.itemText} >{item.name}</Text> <Ionicons name='chevron-forward' size={24} /> </View> </TouchableOpacity> </Link> ) } return ( <View style={{ flex: 1 }}> {pokemonQuery.isLoading && <ActivityIndicator style={{ marginTop: 30 }} />} <FlashList data={pokemonQuery.data} renderItem={renderItem} ItemSeparatorComponent={() => <View style={{ height: 1, width: "100%", backgroundColor: "#dfdfdf" }} />} estimatedItemSize={100} /> </View> ) } const styles = StyleSheet.create({ item: { padding: 10, height: 100, flexDirection: "row", alignItems: "center", justifyContent: "center" }, itemText: { fontSize: 18, textTransform: "capitalize", flex: 1 }, preview: { width: 100, height: 100 } }) export default Page
核心原因是不同组件库对ListRenderItem的类型定义存在差异,使用对应组件库提供的类型就能解决这类类型不兼容问题。
内容的提问来源于stack exchange,提问作者Nemesis
相关产品推荐
相关产品推荐

