无法在字符串上创建属性“键”

时间:2018-06-29 18:00:06

标签: javascript reactjs firebase firebase-realtime-database

我正在使用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>
});

1 个答案:

答案 0 :(得分:5)

我相信您拥有的是您要修改的不可变对象。

https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot

  

DataSnapshot是在数据库位置处有效生成的数据的不变副本。   它不能被修改并且永远不会改变(要修改数据,您总是直接在Reference上调用set()方法)。

尝试将待办事项和关键点放入这样的新对象中:

const todo = { key: snapshot.key, value: snapshot.val() }