gpt4 book ai didi

javascript - 设置没有删除项目的状态

转载 作者:行者123 更新时间:2023-11-29 16:36:19 24 4
gpt4 key购买 nike

我这里有一个使用 React 和 Firebase 的待办事项列表。我可以成功地从 firebase 中删除一项并添加一项。问题是在项目被删除后对重新渲染使用react。我正在玩它,我意识到我做错了什么,但不知道如何解决我的问题。

这是我的 componentDidMount 方法,我将状态设置为等于 firebase 发送的数据。

componentDidMount() {
this.todosRef.on('child_added', snapshot => {
const todo = { key: snapshot.key, value: snapshot.val() }
this.setState({ todos: this.state.todos.concat( todo ) });
});

this.todosRef.on('child_removed', snapshot => {
const removedTodo = { key: snapshot.key, value: snapshot.val() }
const index = this.state.todos.indexOf(removedTodo);
this.setState({ todos: this.state.todos.splice(index, removedTodo)
});
});
}

正如你所看到的,每当我删除一个项目并调用 this.setState({ todos: this.state.todos.splice(index,removedTodo) }); 时,它会将状态设置为空数组(因为我试图将状态设置为我刚刚删除的项目...),它重新呈现页面并且不显示任何内容。我希望它重新渲染页面并仍然保留剩余的待办事项。

最佳答案

indexOf 只会查找具有完全相同对象引用的对象,因此,即使您创建一个与要删除的待办事项具有完全相同数据的新对象,它也不起作用,遗憾的是.

您可以使用与 snapshot.key 相同的 key过滤项目。

this.todosRef.on('child_removed', snapshot => {
this.setState(previousState => {
const todos = previousState.todos.filter(todo => todo.key !== snapshot.key);

return { todos };
});
});

关于javascript - 设置没有删除项目的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51200177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com