В Next.js нет стандартного способа отслеживания историй навигации браузера, особенно когда дело касается обновления страниц после перехода по внешней ссылке. Однако можно использовать некоторые подходы для отслеживания состояния и определения, что пользователь пришел с внешней ссылки или обновил страницу.
Вот несколько методов, которые могут помочь вам в этой задаче:
### 1. Использование `localStorage` или `sessionStorage`
Вы можете сохранить флаг в `localStorage` или `sessionStorage`, который указывает, что пользователь пришел с внешней ссылки. Этот флаг можно установить при переходе по ссылке, а затем проверить при загрузке страницы.
```javascript
// В компоненте, где вы обрабатываете переход
useEffect(() => {
const previousUrl = sessionStorage.getItem("previousUrl");
const currentUrl = window.location.href;
if (document.referrer && document.referrer !== currentUrl) {
// Переход с внешней ссылки
sessionStorage.setItem("cameFromExternalLink", "true");
} else {
sessionStorage.setItem("cameFromExternalLink", "false");
}
sessionStorage.setItem("previousUrl", currentUrl);
}, []);
```
При загрузке страницы вы можете проверить значение `cameFromExternalLink` для определения, пришел ли пользователь с внешней ссылки:
```javascript
const cameFromExternalLink = sessionStorage.getItem("cameFromExternalLink") === "true";
```
### 2. Использование `document.referrer`
Вы можете использовать `document.referrer` для проверки, откуда пришёл пользователь. Если он был установлен, значит, пользователь пришёл с другой страницы:
```javascript
if (document.referrer) {
// Пользователь пришёл с другой страницы
} else {
// Пользователь пришёл напрямую или обновил страницу
}
```
Обратите внимание, что `document.referrer` будет пустым, если пользователь открыл страницу напрямую.
### 3. Обработка навигации с помощью Router события
Next.js предоставляет Router события, которые могут помочь отслеживать изменения маршрута и определять, пришёл ли пользователь с внешней ссылки.
```javascript
import { useEffect } from 'react';
import { useRouter } from 'next/router';
const MyComponent = () => {
const router = useRouter();
useEffect(() => {
const handleRouteChange = (url) => {
console.log('Route changed to: ', url);
};
router.events.on('routeChangeStart', handleRouteChange);
return () => {
router.events.off('routeChangeStart', handleRouteChange);
};
}, [router.events]);
return (
<div>
<h1>My Page</h1>
{/* Контент вашего компонента */}
</div>
);
};
```
Таким образом, комбинируя указанные методы, вы сможете более точно отслеживать историю навигации и определять, пришёл ли пользователь с внешних ссылок.