【发布时间】:2019-02-01 12:07:03
【问题描述】:
我正在开发一个带有后端 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>
<button className="btn btn-danger btn-sm" onClick={this.removeTodo.bind(this)}>
<i className="fa fa-trash"></i>
</button>
</td>
</tr>
)
})
}
</tbody>
}
我尝试将todos 状态长度重置为零,然后调用getTodos,但这并没有解决问题。有什么想法吗?
【问题讨论】:
标签: javascript reactjs firebase firebase-realtime-database