Я пытаюсь обновить свое старое приложение Todo List React, чтобы оно использовало хуки, и не могу понять это на всю жизнь. setTodos успешно обновляет состояние при загрузке, как показано в инструментах разработчика React, но компонент не выполняет повторную визуализацию, и на экране отображается пустой список задач. Только когда я добавляю Todo в список, он перерисовывается, и все задачи отображаются. Вот что у меня есть:
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 ] });
});
});
};