[英]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.