Бесконечный цикл при использовании useEffect, форматирование массива

#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 не требуется.