javascript - Firebase数据重复问题

标签 javascript reactjs firebase firebase-realtime-database

我正在开发一个带有后端 firebase 的 React TODO 应用程序。我遇到的问题是,在从 Firebase RTD 更新或删除节点后,从 Firebase RTD 发送的数据会追加两次。

状态:

// Initialize state
this.state = {
    todos: []
}

这是我的getTodos函数,它负责读取数据,在componentDidMount内部调用:

getTodos () {
    firebase.database().ref('todos').on('value', (todo) => {
        const todos = todo.val();
        // Iterate through keys
        Object.keys(todos).map(todoItem => {                
            let todo = todos[todoItem];
            // Update the todos array
            this.setState({
                todos: [...this.state.todos, todo]
            })
        })
    })
}

渲染部分:

<tbody>
{
  this.state.todos.map((todo, index) => {
     return (
        <tr key={index}>
           <td>{index + 1}</td>
           <td>{todo.title}</td>
           <td>{todo.date}</td>
           <td align="center">
           <button className="btn btn-success btn-sm" data-toggle="modal" data-target="#editModal" onClick={this.assignID.bind(this)}>
                   <i className="fa fa-pencil"></i>
               </button> &nbsp;
               <button className="btn btn-danger btn-sm" onClick={this.removeTodo.bind(this)}>
                   <i className="fa fa-trash"></i>
               </button>
                </td>
         </tr>
          )
        })
      }
    </tbody>
}

结果(删除 TODO 之前): enter image description here

删除 TODO 后: enter image description here

我尝试将 todos 状态长度重置为零,然后调用 getTodos,但这并没有解决问题。有什么想法吗?

最佳答案

您没有清除该状态中 todos 的现有内容。另外:您在循环的每次迭代中都更新状态,这是低效的。

firebase.database().ref('todos').on('value', (snapshot) => {
    var todos = [];
    snapshot.forEach((todo) => {
        todos.push(todo.val());
    });
    this.setState({
        todos: todos
    })
})

关于javascript - Firebase数据重复问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54472269/

相关文章:

javascript - 拖放 HTML 表格列(而不是行)

javascript - 如何在没有 JSX 的情况下在 React.js 中呈现 html 实体

html - 悬停时顶部导航栏下拉菜单消失得太快 React

android - Firebase DB 即使在发送消息后也不会更新

javascript - firebase 数据列表

javascript - Meteor 使用 namedContext 将 InvalidKeys 添加到返回错误的 AutoForm 表单

javascript - 使用 Javascript 预加载数组

javascript - 与 React hooks 一起使用时,React router 无法正常工作?

android - 找不到兼容的并排 NDK 版本 React Native

firebase - 如何访问newData服务器变量的键?