react-native - 在反应本机中单击位于其外部的按钮时更改 Flatlist 的项目
问题描述
我有一组图像,我可以使用它们来显示FlatList
,当单击图像时,它也会以更大的尺寸显示在外面FlatList
。我在较大的图像旁边有一个左右图标,它应该用于显示当前图像中的下一个或上一个图像。
下面是我的代码:
const [selectedImage, setSelectedImage] = useState(img1);
const [imageSet, setImageSet] = useState([img1,img2,img3,img4]);
return (
<SafeAreaView>
<View
style={{height: 400,width: 100}}>
<TouchableOpacity
onPress={() => {
//What should I do here
}}>
<Icon name={'chevron-left'} color={Colors.primary} size={54} /> // left press icon
</TouchableOpacity>
<Image style={{height: 350, width: 300}} source={selectedImage} />
<TouchableOpacity
onPress={() => {
//What should I do here
}}>
<Icon name={'chevron-right'} color={Colors.primary} size={54} /> // right press icon
</TouchableOpacity>
</View>
<FlatList
horizontal={true}
showsHorizontalScrollIndicator={false}
data={imageSet}
renderItem={({item, index}) => (
<View>
<TouchableOpacity
onPress={() => {
setSelectedImage(item);
}}>
<Image
source={item}
key={index}
style={{
width: 60,
height: 60,
resizeMode: 'contain',
}}
/>
</TouchableOpacity>
</View>
)}
/>
</SafeAreaView>
);
我无法弄清楚如何显示下一张或上一张图片。请帮忙。
解决方案
您应该在 中设置selectedImage
拍摄下一张图像imageSet
。唯一的问题是确定您在imageSet
数组中选择的图像。为此,您可以使用另一个状态变量。就像是:
const [selectedImage, setSelectedImage] = useState(img1);
const [imageSet, setImageSet] = useState([img1,img2,img3,img4]);
const [indexImageSel, setIndexImageSel] = useState(0); //<-- 0 because the default value for selectedImage is img1
然后在FlatList
TouchableOpacity
您选择的存储图像索引上:
<TouchableOpacity
onPress={() => {
setSelectedImage(item);
setIndexImageSel(index); // <-- store image index selected
}}>
<Image
source={item}
key={index}
style={{
width: 60,
height: 60,
resizeMode: 'contain',
}}
/>
</TouchableOpacity>
然后是左右箭头的逻辑:
<View
style={{height: 400,width: 100}}>
<TouchableOpacity
onPress={() => {
//What should I do here? decrement index and set selectedImage
let newIndex = (indexImageSel - 1) % imageSet.length;
setSelectedImage(imageSet[newIndex]);
setIndexImageSel(newIndex);
}}>
<Icon name={'chevron-left'} color={Colors.primary} size={54} /> // left press icon
</TouchableOpacity>
<Image style={{height: 350, width: 300}} source={selectedImage} />
<TouchableOpacity
onPress={() => {
//What should I do here? increment index and set selectedImage
let newIndex = (indexImageSel + 1) % imageSet.length;
setSelectedImage(imageSet[newIndex]);
setIndexImageSel(newIndex);
}}>
<Icon name={'chevron-right'} color={Colors.primary} size={54} /> // right press icon
</TouchableOpacity>
</View>
推荐阅读
- rest - 如何在 Flutter 和 Prestashop 中进行登录
- reactjs - 如何在 babel-plugin-module-resolver 中使用 root 选项?
- android - 如何设置物品重量导航抽屉?
- if-statement - Else-If 命令在执行自己的 ifs 后创建变量
- r - 如何从过滤后的数据框中提取向量
- javascript - 迁移到 Typescript 时无法弄清楚如何使用模式指令
- python - 如何在 Python 中乘以 3D numpy 数组以获得 2D numpy 数组?
- bash - 带有awk的bash中的正则表达式
- c - 在 c 语言的 for 循环中提供输入后,我的程序停止工作
- bluetooth - 没有虚拟方法 isLe2MPhySupported() 的应用程序崩溃