【问题标题】:Retrieving doc().id from google firebase documents from individual components in react native从反应原生的各个组件中检索 doc().id 从 google firebase 文档
【发布时间】:2021-11-07 06:30:27
【问题描述】:

我有一个屏幕列出“任务”,它们都是相同的组件<TaskItem>,只是发送给它们的道具不同。

每个 <TaskItem> 都是通过迭代 Firestore 数据库集合中的文档来创建的。

我想在个人被点击时访问他们的 doc().id。

我的问题是:如何在渲染后访问每个特定 <TaskItem> 的 doc().id?这个 doc().id 在创建时是否以某种方式附加或存储在 <TaskItem> 中?

tasks1 从后端检索任务并创建一个数组以使用map on

db.collection('users').doc(id).collection('tasks').onSnapshot((snapshot)=>{
          const tempTasks = [];
          snapshot.forEach(
             doc => {
                 tempTasks.push(doc.data());
             }
          )
          setTasks(tempTasks);
      });

Firestore 数据库结构

db.collection('users').doc(id).collection('tasks').doc().id

我在“任务”上使用map 进行迭代,并为数据库中的每个“任务”项创建一个<TaskItem>。每个存储的 doc().id 是随它一起存储还是我必须手动访问它?

<View style={styles.tasks}>
                    
                        {tasks1.map((task) => {
                            return (

                                <View style={{ margin: 4}}>
                                <TaskItem
                                    //PROPS
                                    notes={task.notes}
                                    reminder={task.reminder}
                                    name={task.name}
                                    assigned={task.assigned}
                                    tagName = {task.tag}
                                    profileImage={task.profileImage}
                                    color={task.color}
                                    changeModal={() => changeStateHandler()}
                                    onPress={()=>setTagClicked(!tagClicked)}
                                />
                                </View>
                            );
                        })}
                    </View>

【问题讨论】:

    标签: javascript reactjs firebase react-native google-cloud-firestore


    【解决方案1】:

    使用.data() 后,您的对象只包含您存储在 Firestore 中的字段。您可以通过添加几行来同时拥有数据和文档 ID,如下所示:

    doc => {
      var newData = doc.data();
      newData.id = doc.id;
      tempTasks.push(newData);
    }
    

    【讨论】:

    • 好的,非常感谢!我想知道我是否必须做这样的事情,或者 React 在选择任务时知道它是哪个文档......似乎我需要像你提到的那样手动存储它。
    • 从技术上讲,在使用.data() 之后,它现在指的是不同的对象。因为.data()documentSnapshot 上的一个方法。 id 是特定于 documentSnapshot 的参数,如布尔值 exists..等。如果它回答了您的问题,请考虑将其标记为您问题的解决方案。
    • 这似乎已经回答了这个问题......所以我的目标是点击列表中的一个任务,一个模式会弹出一个删除按钮,然后我可以删除它。这就是为什么我需要访问 doc().id...如果我现在选择一个任务,我应该能够访问它吗?
    • 它存储在您的newData 对象中,然后将其推送到tempTasks。试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多