我有一个多重可按组件。我如何才能使它当我点击摩托车可按,检查图标将显示在它旁边,如果在三轮车可按,检查图标将显示在它旁边,摩托车图标上的一个将消失。
我试过创建一个状态,但是它同时将所有图标设置到位。代码如下:
const [checkIcon, setCheckIcon] = useState(false)
<Pressable
style={({ pressed }) => [{ opacity: pressed ? 0.4 : 1 }, styles.modalField]}
onPress={() => setCheckIcon(true)}
>
<Image source={require("../assets/motorcycle.png")} style={styles.modalFieldImage} />
<View style={styles.modalFieldVehicleNameContainer}>
<Text style={styles.modalFieldText}>Motorcycle</Text>
<Text style={styles.modalFieldTextDescription}>Cheapest option perfect for small-sized items</Text>
<Text style={styles.modalFieldTextDescription}>Up to 20 kg</Text>
</View>
{
checkIcon === true ? <Icon name="check" type="font-awesome-5" size={hp("3%")} color="#322C6A" style={styles.modalFieldIcon} /> : null
}
</Pressable>
<Pressable
style={({ pressed }) => [{ opacity: pressed ? 0.4 : 1 }, styles.modalField]}
onPress={() => setCheckIcon(true)}
>
<Image source={require("../assets/tricycle.png")} style={styles.modalFieldImage} />
<View style={styles.modalFieldVehicleNameContainer}>
<Text style={styles.modalFieldText}>Tricycle</Text>
<Text style={styles.modalFieldTextDescription}>Perfect for multiple medium-sized items</Text>
<Text style={styles.modalFieldTextDescription}>Up to 70 kg</Text>
</View>
{
checkIcon === true ? <Icon name="check" type="font-awesome-5" size={hp("3%")} color="#322C6A" style={styles.modalFieldIcon} /> : null
}
</Pressable>
<Pressable
style={({ pressed }) => [{ opacity: pressed ? 0.4 : 1 }, styles.modalField]}
onPress={() => setCheckIcon(true)}
>
<Image source={require("../assets/sedan.png")} style={styles.modalFieldImage} />
<View style={styles.modalFieldVehicleNameContainer}>
<Text style={styles.modalFieldText}>Sedan Car</Text>
<Text style={styles.modalFieldTextDescription}>Good for cakes and multiple small to medium-sized items</Text>
<Text style={styles.modalFieldTextDescription}>Up to 200 kg</Text>
</View>
{
checkIcon === true ? <Icon name="check" type="font-awesome-5" size={hp("3%")} color="#322C6A" style={styles.modalFieldIcon} /> : null
}
</Pressable>
2条答案
按热度按时间g0czyy6m1#
下面是一个简单的示例,使用索引状态来记录用户选择的项。
因为你的列表可以动态生成,所以你可以用一个数组来存储所有用于渲染的参数,并使用
map()
来逐个渲染。Hardik prajapati的回答也是另一个解决方案。当数据列表在运行时排序时,该方法不会影响结果。但大的对象修改会触发组件的重新渲染,这在某些情况下可能会导致性能问题。
因此,您可以为您的情况选择不同的方法。
k2arahey2#
创建车辆项目数组,如
vehicle:[ image:'put your imageUrl', name:'', description:'', clickStatus:true ]
然后使用map方法显示所有数组项,当您单击任何项时,使用clickStatus键可按下项为真,其他两项为假更新您数组,并根据真或假显示Check Icon