Обʼєкт місцезнаходження
При переміщенні по застосунку у стек історії записуються обʼєкти про розташування (location). Вони мають стандартний набір властивостей, які зберігають повну інформацію про URL.
Що зберігається у цьому обʼєкті:
pathname - рядок, який містить частину URL від початкового / і до символу ?.
search - містить весь рядок запиту. Якщо параметри відсутні, то значенням буде порожній рядок.
hash - рядок, який містить частину URL після рядка запиту та символу #, за яким слідує ідентифікатор фрагмента URL-адреси. Якщо ідентифікатор фрагмента відсутній, значенням буде порожній рядок.
state - довільне значення, яке містить додаткову інформацію, пов'язану з розташуванням, але не відображається в URL-адресі. Це поле використовують розробники для передачі даних між маршрутами.
key - унікальний рядок ідентифікатор, пов'язаний із цим локейшеном. Службова властивість, значення якої задається автоматично для кожного нового запису в історії навігації.
Наприклад, для такого URL об'єкт розташування може мати наступний вигляд:
Хук useLocation повертає об'єкт розташування поточного URL. При навігації новими маршрутами по застосунку цей обʼєкт оновлюється. Є різні варіанти використання розташування, наприклад застосувати useEffect i, наприклад надсилати дані на сервіс статистики при оновленні локації.
Уявімо, що у нас на сторінці прикладів робіт /works велика їх кількість і ми робимо пошук, наприклад за словом cafe /works?name=cafe. І нам видає список прикладів робіт, які мають тільки такий збіг у назві. При переході на сторінку якоїсь із робіт нам потрібно зберегти локацію попередньої сторінки разом із рядком запиту. І реалізувати кнопку "назад" при натисканні на яку ми не просто повернемося на сторінку /works а разом з рядком запиту /works?name=cafe.
Вище було зазначено, що в обʼєкта розташування є властивість state. З її допомогою можна передавати довільні дані при навігації з одного маршруту до іншого. Для цього в компоненті Link потрібно передати prop state, а в ньому обʼєкт із властивістю from - звідки прийшов користувач. Prop state може бути довільної структури на вибір розробника.
Тепер це значення prop state буде доступно на об'єкті розташування на маршруті куди була виконана навігація (в даному разі на компонент WorkDetails). Щоб в ньому отримати дані про поточну локацію, і локацію з якої ми прийшли, потрібно за допомогою хука useLocation отримати обʼєкт location і прочитати її властивість state.
Але ніхто насправді на практиці не передає рядок URL маршруту у властивості from. у prop state передають одразу об'єкт location поточного маршруту.
Коли ми перемістимося за новим роутом у властивості location.state буде посилання на об'єкт location маршруту з якого відбулася навігація.
Тепер на новій сторінці компоненту Link можна передати prop to і передати в ньому location.state.from і це буде посиланням на попередню сторінку.
Але уявімо ситуацію, що на сторінку продукту користувач прийшов за прямим посиланням у новій вкладинці, а не з іншої сторінки всіх робіт. В такому випадку в location.state буде null, бо на попередньому етапі ми не передали ніякого локейшена. І при натисканні на кнопку виникне помилка. В такому разі треба передбачити, що якщо немає маршруту на попередню сторінку, то перехід відбуватиметься на сторінку всіх робіт. Тобто визначимо значення porop to за замовчанням.
Це спрощений синтаксис тернарного оператора з такою умовою
Last updated