При использовании хуков вы должны определить массив зависимостей, который при изменениях перезапускает функцию внутри хука.
В первом случае это todos
, потому что вы используете его для фильтрации. Теперь, что происходит, когда вы устанавливаете toTos с новым массивом, изменяются ваши todos зависимостей, который снова запускается, и setTodos устанавливает новые todos. Это на самом деле работает бесконечно, что не то, что вы хотите. Вы не должны определять зависимость для ловушки, значение которой устанавливается внутри нее.
Во втором случае нет никакой зависимости, поэтому даже если вы установите setTodos, она не будет перезапущена. Хук setTodos
предоставляет свое текущее значение в параметре обратного вызова, который можно использовать, чтобы избежать добавления зависимости. Кроме того, этот способ является правильным способом сделать это.