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

使用React和Firebase开发待办列表时如何渲染两个输入框的数据

问题根因

你遇到的问题由两个核心错误导致:

  • 从Firestore拉取数据时未提取title字段:useEffect的快照处理逻辑中,仅将id和todo字段存入todos数组,title字段直接被遗漏,所以todos数组中的每个元素本身就不存在title属性,自然无法渲染。
  • map遍历参数定义错误:todos.map((todo, title) =>的第二个参数是数组遍历的索引值,不是你以为的title字段,属于对数组遍历方法的逻辑误解。

修复步骤

1. 补全Firestore数据拉取逻辑

修改父组件AddLink.js中useEffect的代码,把title字段也存入todos数组:

useEffect(() => {
  db.collection("links")
    .orderBy("timestamp", "desc")
    .onSnapshot((snapshot) => {
      setTodos(
        snapshot.docs.map((doc) => ({
          id: doc.id,
          todo: doc.data().todo,
          title: doc.data().title // 新增该行,补全title字段的提取
        }))
      );
    });
}, []);

2. 修正遍历逻辑,规范props传递

修改父组件遍历渲染Todo组件的代码,修正参数写法,避免变量重名导致的逻辑混淆:

{todos.map((todoItem) => (
  // 直接传递整个todo对象即可,不用拆分属性,逻辑更简洁
  <Todo todo={todoItem} key={todoItem.id} />
))}

3. 子组件保持原有逻辑即可

你现有子组件的取值逻辑props.todo.title、props.todo.todo和上面的传参方式完全匹配,不需要额外修改,直接就能正常读取两个字段的值渲染。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:39:03