[英]React not rendering passed in props
我正在关注 React.js 的教程,以制作 Todo 应用程序为例。
应用程序.js
import React, { Component } from 'react';
import TodoItem from "./components/TodoItem";
import Data from "./Data";
class App extends Component {
constructor(){
super();
this.state = { todos:[Data] }
}
render() {
const TodoItems = this.state.todos.map(item =>
<TodoItem key={item.id} item={item} />)
return (
<div>
{todoItems}
</div>
)
}
}
export default App;
TodoItem.js
import React from 'react';
function TodoItem (props) {
return (
<div>
<input type="checkbox" checked={props.item.completed} />
<p>{props.item.text}</p>
</div>
)
}
export default TodoItem;
Data.js 只是一个数组
const Data = [{id: 1, text: "Some random text", completed: true}, //and so on... ]
当我运行它时,浏览器只呈现一个复选框,没有别的。 有什么我想念的吗? 我通过 chrome 检查了开发工具,看到有 props 正在传递。
问题是这样的: this.state = { todos:[Data] }
这不会像我认为你打算做的那样将Data
的内容放入todos
中,它使todos
成为一个包含Data
的数组,它本身就是一个数组,即:
todos = [ [ {id: 1, text: "Some random text", completed: true}, ... ] ]
因此,当您在 this.state.todos 上this.state.todos
时,您拉出的“ item
”实际上是todos
中的单个项目,实际上是整个Data
数组! (不是您想要的Data
中的项目)
该数组没有text
属性,因此不显示文本。 它当然也没有completed
的属性,但复选框不需要该属性存在即可呈现,因此您只会看到一个没有文本的单个复选框。
将其更改为此,它应该可以工作。
this.state = { todos: Data }
一个不相关的事情,肯定只是这里代码中的复制/粘贴错字,但为了完整起见,你有const TodoItems =...
但然后在 JSX 中引用{todoItems}
。 我想这应该是const todoItems =...
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.