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

React待办清单应用编译失败:'Todo'未定义错误求助

解决React待办清单应用的编译报错问题

嘿,我一眼就揪出几个导致报错的小问题啦,咱们逐个来搞定:

1. 组件名称大小写不匹配(核心报错原因)

你在App.js里导入的组件是ToDo:

import ToDo from './ToDo.js'

但渲染的时候却写成了<Todo>:

const val = DoData.map(item => <Todo key = {item.id} item = {item}/>)

React对组件名称的大小写是严格敏感的!而你的ToDo.js里导出的是Todo函数,所以要么把App.js里的导入改成import Todo from './ToDo.js',要么把渲染的组件改成<ToDo>。推荐前者,保持和组件定义的名称一致。

2. DoData.js的导出语法错误

你的DoData.js最后一行写错了:

export default DoData.js

这里多了个.js后缀,正确的导出应该是:

export default DoData

不然导入的时候根本拿不到正确的数组数据。

3. App.js的return内容不符合JSX规则

React组件的return必须返回单个JSX元素,你直接返回{val}是不行的,得把它包裹在容器里,比如用<div>或者更简洁的Fragment(<>)。

修正后的完整代码:

App.js

import React from 'react';
import logo from './logo.svg';
import './App.css';
import Todo from './ToDo.js' // 修正导入名称
import DoData from './DoData.js'

function App() {
  const val = DoData.map(item => <Todo key={item.id} item={item}/>)
  return (
    <div className="App"> {/* 加上容器元素 */}
      {val}
    </div>
  );
}

export default App;

ToDo.js

import React from 'react'

function Todo(props){
  return(
    <div className="todo-item">
      <input type="checkbox" checked={props.item.completed}></input> {/* 修正属性名:props.things → props.item,和传入的参数对应 */}
      <p>{props.item.description}</p>
    </div>
  )
}

export default Todo

DoData.js

let DoData = [
  { id: 1, description: "go for a walk", completed: true },
  { id: 2, description: "babysitting", completed: true },
  { id: 3, description: "watch MadMen", completed: false },
  { id: 4, description: "See the mailman", completed: true },
  { id: 5, description: "Say hello to the world", completed: false }
]

export default DoData // 去掉多余的.js后缀

对了,刚才发现ToDo.js里你用了props.things,但App.js里传的是item={item},所以这里也得改成props.item,不然渲染的时候会拿不到数据哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:44:08