【发布时间】:2020-03-31 16:54:38
【问题描述】:
我正在尝试更新我的旧 Todo List React 应用程序,以便它使用钩子,但我一辈子都无法解决这个问题。 setTodos 已成功更新加载时的状态,如 React 开发人员工具中所示,但组件不会重新渲染,并且屏幕上会显示一个空白的待办事项列表。只有当我将一个待办事项添加到列表中时,它才会重新渲染并且所有待办事项都会显示出来。这是我得到的:
const App = () => {
// Todos are the only state in App
const [ todos, setTodos ] = useState([]);
// Fetches Todos from Firestore database on load
useEffect(() => {
const initialState = [];
dbTodos.get().then((snapshot) => {
snapshot.forEach((doc) => {
const currentTodo = doc.data();
currentTodo['id'] = doc.id;
initialState.push(currentTodo);
});
});
setTodos(initialState);
// eslint-disable-next-line
}, []);
// Add Todo
const addTodo = (title) => {
const newTodo = {
title : title,
completed : false
};
dbTodos.add(newTodo).then((doc) => {
newTodo['id'] = doc.id;
setTodos([ ...todos, newTodo ]);
});
};
这是我在实现钩子之前使用的代码:
componentDidMount() {
dbTodos.get().then((snapshot) => {
snapshot.forEach((doc) => {
const currentTodo = doc.data();
currentTodo['id'] = doc.id;
setState({ ...state, todos: [ ...state.todos, currentTodo ] });
});
});
};
【问题讨论】:
-
请添加JSX的代码或者你渲染的任何地方
标签: reactjs react-hooks