Использование useEffect с useLocation

Я хочу знать, в чем самая большая разница между использованием (или нет) useEffect для обновления useLocation.

Обычно я нахожу, что люди устанавливают useLocation внутри useEffect для обновления состояния всякий раз, когда изменяется путь URL-адреса, но я обнаружил, что мне не нужно делать это, чтобы обновить местоположение.

const NavBar = () => {
  const location = useLocation();
  const [currentPath, setCurrentPath] = useState('')

  const location = useLocation();
  console.info('pathname:', location.pathname)

   useEffect(() => {
     setCurrentPath(location.pathname);
   }, [location]);

console.info('currentPath:', currentPath)
...
}
Returns
pathname: /results:Cancer
currentPath: /results:Cancer

Я имею в виду, что единственная разница, которую я нахожу, заключается в том, что с useEffect возврат произойдет после монтирования компонента. Я пытаюсь понять лучшие практики, чтобы стать лучшим программистом.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
8
0
4 679
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина useEffect здесь в том, что вы устанавливаете state внутри эффекта. Если вы удалите useEffect и просто выполните:

const location = useLocation();
const [currentPath, setCurrentPath] = useState('');

setCurrentPath(location.pathname);

Вы, вероятно, увидите эту ошибку:

Слишком много повторных рендеров. React ограничивает количество рендеров, чтобы предотвратить бесконечный цикл.

Это связано с тем, что setCurrentPath запускается при каждом рендеринге и вызывает новый рендеринг, следовательно, бесконечный цикл.

useEffect позволяет вам отказаться от каких-либо действий, если deps не изменилось. Здесь setCurrentPath вызывается только при изменении location.

Но более широкая точка зрения заключается в том, что вам обычно не нужно «кэшировать» состояние местоположения внутри состояния вашего компонента. Это уже состояние внутри хука useLocation. Просто прочитайте и используйте, не храните.

Другие вопросы по теме