You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React可完整显示Firestore数组,但无法读取单个属性,原因何在?

问题分析与解决方案

你的代码存在三个核心问题导致documente.title显示undefined:

1. useState使用方式错误

useState返回的是包含状态值和状态更新函数的数组,你直接把整个返回值赋值给documente,导致documente并不是单纯的数组,而是[数组, 更新函数]的结构,后续的push操作完全不符合React状态管理规范。

正确写法需解构出状态和更新函数:

const [documente, setDocumente] = useState([])

2. 直接修改状态数组

React状态是不可变的,不能用documente.push()直接修改状态数组,必须通过setDocumente来更新状态。建议先收集所有文档数据,再一次性更新状态。

3. 错误访问数组属性

documente是数组,数组本身没有title属性,你需要访问数组中单个元素的title,比如遍历过程中打印当前元素的title,或后续遍历数组时逐个访问。


修正后的完整代码

import React, { useEffect, useState } from 'react'
import { Button, Container } from 'react-bootstrap'
import '../components/Inbox.css'
import Sidebar from "../components/sidebar"
import { collection, query, where, getDocs, setDoc, doc } from 'firebase/firestore'
import { db } from '../firebase'
import { useAuth } from '../contexts/AuthContext'
import { Link } from 'react-router-dom'

function Inbox() {

  const { currentUser } = useAuth()
  const [documente, setDocumente] = useState([]) // 修正useState使用方式

  async function emails() {
    try {
      const querySnapshot = await getDocs(query(collection(db, 'mails'), where('recipient', '==', currentUser.email)))
      // 先收集所有邮件数据
      const mailList = []
      querySnapshot.forEach((doc) => {
        const mailData = {
          id: doc.id,
          title: doc.data().title,
          sender: doc.data().sender
        }
        mailList.push(mailData)
        console.log(mailData.title) // 打印单个邮件的title
      })
      // 一次性更新状态
      setDocumente(mailList)
      // 遍历数组打印所有邮件title
      mailList.forEach(mail => console.log(mail.title))
    } catch {
      console.log('no work')
    }
  }

  useEffect(() => { emails() }, [currentUser.email]) // 添加依赖项,确保用户邮箱变化时重新获取数据

  return (
    <>
      <Sidebar />
      {/* 渲染邮件列表示例 */}
      {documente.map(mail => (
        <div key={mail.id} className="mail-item">
          <h3>{mail.title}</h3>
          <p>发件人: {mail.sender}</p>
        </div>
      ))}
    </>
  )
}

export default Inbox

额外优化说明

  • 移除了不必要的AuthProvider嵌套(组件内已用useAuth,说明外层已有该Provider)
  • 在useEffect依赖数组中添加currentUser.email,避免过时数据或重复请求
  • 添加了邮件列表渲染示例,可直接用于展示获取到的数据

内容的提问来源于stack exchange,提问作者user21244553

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:08:09