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

React Native Expo使用FlatList报Objects are not valid as a React child错误如何解决

React Native Expo FlatList渲染Firebase数据报错解决方案

报错信息

Error: Objects are not valid as a React child (found: object with keys {seconds, nanoseconds}). If you meant to render a collection of children, use an array instead.

根因定位

错误出在你代码中的这一行:

<Text>{PostInfo.From_Date} - 11/10/2021</Text>

你从Firebase Firestore拉取的From_Date字段是Firebase原生的Timestamp类型,本质是包含seconds和nanoseconds两个属性的对象,React不允许直接将对象作为子元素放在<Text>等组件中渲染,因此抛出该错误。

修复方案

方案1:渲染时即时转换

直接调用Timestamp对象自带的toDate()方法转为JS原生Date对象,再格式化为字符串即可:

// 替换原有行,示例为转为本地化日期格式
<Text>{PostInfo.From_Date.toDate().toLocaleDateString()} - 11/10/2021</Text>

如果需要自定义日期格式,可自行拼接:

// 封装格式化方法
const formatFireDate = (timestamp) => {
  const date = timestamp.toDate()
  return `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}`
}

// 渲染时调用
<Text>{formatFireDate(PostInfo.From_Date)} - 11/10/2021</Text>

方案2:拉取数据时统一预处理

在获取Firebase数据的逻辑里提前把所有Timestamp类型字段转为字符串,后续无需重复处理:

// 示例拉取数据逻辑
const getPostData = async () => {
  const postSnapshot = await firebase.firestore().collection('你的集合名').get()
  const processedData = postSnapshot.docs.map(doc => {
    const rawData = doc.data()
    return {
      ...rawData,
      // 预处理时间字段
      From_Date: rawData.From_Date.toDate().toLocaleDateString()
    }
  })
  setPostData(processedData)
  setPostLoaded(true)
}

兼容提示

如果存在字段为空的情况,可添加可选链判断避免报错:

{PostInfo.From_Date?.toDate?.().toLocaleDateString() || ''}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:36:03