reactjs - 反应原生 - 不变违规:不支持动态更改 onViewableItemsChanged
问题描述
我试图在本机反应中构建图像轮播并遇到以下错误:
不变违规:不支持动态更改 onViewableItemsChanged
此错误仅在备用重新加载时出现。
我尝试使用 useRef 挂钩而不是 useCallback 并解决了问题,但我不明白为什么 useCallback 无法解决此问题
代码 :
import React, { useState, useCallback } from 'react'
import { View, FlatList, Image, useWindowDimensions } from 'react-native'
import styles from './styles'
interface imagesProperties {
images: string[];
}
const ImageCarousal = ({ images } : imagesProperties) => {
const [activeIndex, setActiveIndex] = useState(0);
const windowWidth = useWindowDimensions().width;
const onCarousalChange = useCallback( (viewableItems) => {
if(viewableItems.changed.length>0)
setActiveIndex(viewableItems.changed[0].index);
}, [])
return (
<View style={styles.root}>
<FlatList
data={images}
renderItem={ ({ item }) => <Image style={[styles.image, { width: windowWidth-40 }]} source={{ uri : item }} /> }
horizontal
showsHorizontalScrollIndicator={false}
snapToInterval={ windowWidth-20 }
snapToAlignment={'center'}
decelerationRate={'fast'}
viewabilityConfig={{ viewAreaCoveragePercentThreshold: 50 }}
onViewableItemsChanged={onCarousalChange}
/>
<View style={styles.dotContainer}>
{ images.map( (image, index) => <View key={index} style={[styles.dot, { backgroundColor: (activeIndex == index) ? '#d1d1d1':'#fff' }]}></View> ) }
</View>
</View>
)
}
export default ImageCarousal
解决方案
推荐阅读
- javascript - Laravel - 至少选中一个复选框
- python - 在 django 中,返回重定向没有给我所需的输出
- python - 方法调用后python中的(变量)注释
- php - 当我使用 laravel 6.0 版本时出现一些错误,此代码如下所示
- ios - Xcode 11 存档给出 PhaseScriptExecution 失败
- dask - 如何在不杀死工作的情况下重新启动 dask ui?
- vue.js - Nuxt head() 不等待 head 的 asyncData 响应
- javascript - 滚动到material-ui中的选定列表项
- apache - htaccess 不会得到变量
- php - 单击 localhost/server 中的 url 时删除端口号