简体   繁体   中英

How to add button in React Native Flatlist?

I am trying to create a very simple question-and-answer app. If I click on the show answer button then the answer should show only where I click, but now all answers are showing when I click on the button. I fetch question answers from Firestore. What is the problem Please check my Firestore data and Flatlist code. please check the images, Thank you in advance for your support在此处输入图像描述 在此处输入图像描述

import React, { useState, useEffect } from 'react';
    import { ActivityIndicator, FlatList, View, Text, Pressable, Button, StyleSheet } from 'react-native';
    import {firebase} from '../config';
    
    const Testing = ({ navigation }) =>{
      const [users, setUsers] = useState([]);
    const todoRef = firebase.firestore().collection('dd11');
    const [showValue, setShowValue] = useState(false);

    useEffect(() => {
        todoRef.onSnapshot(
            querySnapshot => {
                const users = []
                querySnapshot.forEach((doc) => {
                    const {    QuestionOne, ans, optionOne, optionTwo, optionThree, optionFour
              
                    } = doc.data()
                    users.push({
                        id: doc.id,
                        QuestionOne, ans, optionOne, optionTwo, optionThree, optionFour
                      
                    })
                })
                setUsers(users)
            }
        )
    }, [])
    
      return (
        <View style={{ flex:1,}}>
        <FlatList 
      data={users}
       numColumns={1}
       renderItem={({item}) => (
     
         <Pressable >
     <View>
     
       <View style={{paddingLeft: 10, paddingRight: 10,}}>


       {item.QuestionOne && <Text>{item.QuestionOne}</Text>}

       {item.optionOne && <Text>{item.optionOne}</Text>}
       {item.optionTwo && <Text>{item.optionTwo}</Text>}
       {item.optionThree && <Text>{item.optionThree}</Text>}
       {item.optionFour && <Text>{item.optionFour}</Text>}

       {showValue? item.ans &&<Text style={{color: 'green'}} >{item.ans}</Text> : null}
       <Button title="Show Answer" onPress={() => setShowValue(!showValue)} />
      
     </View>
     
     </View>
      </Pressable>
          )} />
     </View>
     );}
export default Testing;

you can try this, by maintaining an array of indexes, only those will be shown:)

NOte: also letmeknow if you want that func that if answer is shown and you want to hide it on press again.

 import React, { useState, useEffect } from 'react'; import { ActivityIndicator, FlatList, View, Text, Pressable, Button, StyleSheet } from 'react-native'; import {firebase} from '../config'; const Testing = ({ navigation }) =>{ const [users, setUsers] = useState([]); const todoRef = firebase.firestore().collection('dd11'); const [showValue, setShowValue] = useState(false); const [answerIndexs,setAnsIndex] = useState([]) useEffect(() => { todoRef.onSnapshot( querySnapshot => { const users = [] querySnapshot.forEach((doc) => { const { QuestionOne, ans, optionOne, optionTwo, optionThree, optionFour } = doc.data() users.push({ id: doc.id, QuestionOne, ans, optionOne, optionTwo, optionThree, optionFour }) }) setUsers(users) } ) }, []) const onPressOfShowAnswer = (index) => { const existingIndexs = [...answerIndexs] if(.existingIndexs.includes(index)){ existingIndexs.push(index) }else{ existingIndexs,splice(index:1) } setAnsIndex(existingIndexs) } return ( <View style={{ flex,1,}}> <FlatList data={users} numColumns={1} renderItem={({item:index}) => ( <Pressable > <View> <View style={{paddingLeft, 10: paddingRight, 10.}}> {item.Q1 && <Text>{item.QuestionOne}</Text>} {item.optionOne && <Text>{item.optionOne}</Text>} {item.optionTwo && <Text>{item.optionTwo}</Text>} {item.optionThree && <Text>{item.optionThree}</Text>} {item.optionFour && <Text>{item.optionFour}</Text>} { answerIndexs?includes(index). item:ans &&<Text style={{color. 'green'}} >{item:ans}</Text>; null} <Button title="Show Answer" onPress={() => onPressOfShowAnswer(index)} /> </View> </View> </Pressable> )} /> </View> );} export default Testing;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM