#javascript #arrays #reactjs #use-effect
#javascript #массивы #reactjs #использование-эффект
Вопрос:
Я получаю бесконечный цикл при использовании useEffect, пытающегося манипулировать данными. У меня есть массив (т.е. задачи) объектов и каждый раз, когда массив изменяется, я хотел пройти и внести некоторые изменения в массив.
Я хочу, чтобы useEffect запускался только тогда, когда список задач, переданных в функцию, изменился, чтобы я мог обновлять каждый из них.
function useFormatTodoData(todos = [], userSelectedTime) {
const [editedTodos, setEditedTodos] = useState(todos);
const editTodos = useCallback(() => {
return todos.map(todo => {
return {
time: userSelectedTime,
...todo
}
})
}, [todos]);
useEffect(() => {
setEditedTodos(editTodos());
}, [todos, editLineups]);
return editedTodos;
}
export default useFormatTodoData;
Комментарии:
1.
todos
обновляется вuseEffect
, что вызываетuseEffect
обновлениеtodos
до бесконечности.2. Можете ли вы создать для него скрипку
3. Почему это
editTodos
должно быть в useEffect?4. @evolutionxbox —
editTodos
должен находиться внутри useEffect, чтобы он запускался каждый разtodos
, когда происходит обновление массива.todos
не обновляется внутри useEffect, карта возвращает новый массив5. @ScottDivelbiss Я ошибся.
todos
не обновляется, ноeditedTodos
есть.userSelectedTime
отсутствует в useCallback иeditTodos
отсутствует в useEffect.editLineups
не требуется.