在我的项目中,我有一个(水平)FlatList,我想在新页面可见时触发一个函数。我知道我需要指定viewabilityConfig和onViewableItemsChanged。但是,当我这样做时,我一直收到这个错误消息:"不支持动态更改onViewableItemsChanged"。
我是一个新手,所以看其他关于同样错误的帖子并没有让我更聪明。
有什么想法吗?
const DATA = [
20201202 = {
id: "20201202",
data: day1,
},
2020120 = {
id: "2020120",
data: day2,
},
20201204 = {
id: "20201204",
data: day3,
},
]; */
const LiveScreen = (props, { navigation }) => {
const FlatListItem = ({ title }) => (
<View style={styles.item}>
<Text style={styles.title}>{title.day}</Text>
</View>
);
// FLATLIST
const renderFlatList = ({ item }) => <FlatListItem title={item} />;
// VIEWABILITY
const viewabilityConfig = {
waitForInteraction: true,
// At least one of the viewAreaCoveragePercentThreshold or itemVisiblePercentThreshold is required.
viewAreaCoveragePercentThreshold: 95,
itemVisiblePercentThreshold: 75,
};
return (
<View style={{ flex: 1, width: "100%", backgroundColor: "#F4F5F5" }}>
<View style={{ flex: 1 }}>
<SafeAreaView>
<FlatList
horizontal
pagingEnabled
data={DATA}
renderItem={renderFlatList}
keyExtractor={(item) => item.id}
initialScrollIndex={5}
viewabilityConfig={viewabilityConfig}
onViewableItemsChanged={(viewableItems, changed) => {
console.log("Visible items are", viewableItems);
console.log("Changed in this iteration", changed);
}}
/>
</SafeAreaView>
</View>
</View>
);
};
const styles = StyleSheet.create({});
export default LiveScreen;
我已经删除了多余的代码。
先谢了
2条答案
按热度按时间yyyllmsg1#
viewabilityConfig需要在构造函数中完成以避免此错误。
对于功能组件,需要使用Ref钩子。
svmlkihl2#
迟到了,但问题不在于
viewabilityConfig
,而在于onViewableItemsChanged
。在函数组件中,需要分离出
onViewableItemsChanged
的处理程序,并将其放在ref中,如下所示:使用一个带有空依赖项数组的
useCallback
钩子也可以达到同样的效果,但是这种方式更简洁一些。