【发布时间】:2022-12-29 18:42:05
【问题描述】:
因此,我正在关注使用 Rails API 构建反应待办事项列表的教程。
当我尝试将任务添加到列表时,它会呈现要点而不是文本。检查控制台告诉我错误是:
"Warning: Each child in a list should have a unique "key" prop.
但我很确定我已经分配了一个关键道具?
我检查了有问题的代码行
{this.state.items.map((item) => (<TodoItem key={item.id} item={item} >{item}</TodoItem>
它似乎是正确的所以我不确定我在这里做错了什么?
这是我的 TodoList.js
import React, { Component } from "react";
import TodoForm from "./TodoForm";
import TodoItem from "./TodoItem";
const api_url = "http://localhost:3001/api/v1/todos"
class TodoList extends Component {
constructor(props) {
super(props)
this.state = {
items: []
}
this.updateTodoList = this.updateTodoList.bind(this);
}
componentDidMount () {
this.getTasks();
}
getTasks() {
fetch(api_url)
.then(response => response.json())
.then(response_items => {
this.setState({
items: response_items.reverse()
})
});
}
updateTodoList(item) {
let _items = this.state.items
// unshift adds to beginning of array
_items.unshift(item)
this.setState({
items: _items
})
}
render() {
console.log(this.state.items)
return (
<div>
<TodoForm api_url={api_url} updateTodoList={this.updateTodoList} />
<ul id="todo_list">
{this.state.items.map((item) => (
<TodoItem key={item.id} item={item} >{item}</TodoItem>
))}
</ul>
</div>
)
}
}
export default TodoList;
这是我的 ToDoItem.js
import React from "react";
export default function TodoItem(props) {
return (
<li>{props.item.task}</li>
)
}
任何有关理解和修复此错误的帮助将不胜感激。
【问题讨论】:
-
我不确定,我的密钥都有唯一的 ID,因为它们是从 Rails API 生成的,而且 Rails 从不重复 ID。所以我真的不明白我是怎么遇到这个问题的,检查 api 我的 ID 都不一样。
-
你在
this.state.items中有什么可以添加到问题中吗?您还需要将此行<TodoItem key={item.id} item={item} >{item}</TodoItem>更改为<TodoItem key={item.id} item={item} />