我正在使用Firebase并做出反应。我正在通过数据库映射,试图为每个项目分配一个密钥。我之前已经做过,没有任何问题,但是由于某种原因,React不喜欢它。我使用componentDidMount将我的应用程序同步到Firebase,这是我从Firebase抓取每个项目和唯一键的地方。另外,console.log还提供了我想要的正确密钥。
componentDidMount() {
this.todosRef.on('child_added', snapshot => {
const todo = snapshot.val();
todo.key = snapshot.key;
console.log(todo.key);
this.setState({ todos: this.state.todos.concat( todo ) });
});
}
但是当我遍历数组并分配键时,它会引发错误:Cannot create property 'key' on string '
这是我的映射方式:
const listOfTodos = this.state.todos.map( (todo) => {
return <li key={todo.key}>{todo}</li>
});
答案 0 :(得分:5)
我相信您拥有的是您要修改的不可变对象。
https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot
DataSnapshot是在数据库位置处有效生成的数据的不变副本。 它不能被修改并且永远不会改变(要修改数据,您总是直接在Reference上调用set()方法)。
尝试将待办事项和关键点放入这样的新对象中:
const todo = { key: snapshot.key, value: snapshot.val() }