react-native - OnPress 从循环中改变组件的样式- React Native with hooks
问题描述
所以我在 React Native 方面很新,我正在尝试开发一个问答游戏,用户将获得一组答案。我想选择在用户按下组件时更改组件的颜色,有点切换它。到目前为止,我想出了 useState 解决方案,但不幸的是无法弄清楚如何排除颜色的变化,我想我需要遵循索引或其他东西,任何人都可以让我理解解决方案的过程。
export const QuizScreen = ({ navigation,route }) => {
const [quizArray, setQuizArray] = React.useState([])
const [rightAnswer, setRightAnswer]= React.useState(false)
const [selectBtn, setSelectBtn] = React.useState("#fff")
return(
<View>
{quizArray[qno].answer.map(r=>
<TouchableHighlight style={[styles.listItem, {backgroundColor:selectBtn}]}
onPress={()=>{
setRightAnswer(r.rightAnswer)
setSelectBtn("#DDDDDD") //so this changes logically all the component from the list
}}
activeOpacity={0.6} underlayColor="#DDDDDD"
>
<Text>{r.option}</Text>
</TouchableHighlight>
)}
</View>
我需要知道如何只为一个实现背景更改,并让它在每次用户选择或取消选择时切换。谢谢
解决方案
您使用索引来确定单击的列表项是正确的。
您可以通过使用 selectBtn 状态存储所选项目的索引来更改颜色,然后使用该状态相应地设置背景颜色。
您可以这样做:
export const QuizScreen = ({ navigation, route }) => {
const [quizArray, setQuizArray] = React.useState([]);
const [rightAnswer, setRightAnswer] = React.useState(false);
const [selectBtn, setSelectBtn] = React.useState(null);
return (
<View>
{quizArray[qno].answer.map((r, index) => (
<TouchableHighlight
style={[
styles.listItem,
{ backgroundColor: selectBtn === index ? '#dddddd' : '#fff' },
]}
onPress={() => {
setRightAnswer(r.rightAnswer);
setSelectBtn(index);
}}
activeOpacity={0.6}
underlayColor="#DDDDDD">
<Text>{r.option}</Text>
</TouchableHighlight>
))}
</View>
);
};
这是工作示例:Expo Snack
推荐阅读
- swift - 如何将操作按钮添加到自定义 XIB 单元格?
- grafana - InfluxDB 通过 Grafana 查询 - 选择字段包含字符串的位置
- amazon-web-services - botocore.exceptions.NoCredentialsError:无法找到凭据 - Github Actions
- python - 在询问特定内容时在 python 中使用 While 循环
- c# - 当控制器方法上没有指定路由属性时,防止默认属性路由行为
- import - Perforce:无法从发布流导入项目,该项目现已在开发流中删除
- css - 如何使 iframe 内的图像适合 iframe 的大小?(角度)
- javascript - 跨域认证令牌
- flask - Flask/WTForms - 我怎样才能使表单内联?
- mysql - 优化 SQL 以将条件应用于多行