TGViewer
Free React For Beginners Free React For Beginners @reactbeginners · 3.04K subscribers
Post #438 5.44K
Паралельні роути в Next.JS, Частина друга - максимально простий приклад з багами 😂

😎З тим що таке паралельний роутинг ми умовно розібралися. Тепер давайте подивимось це на простому прикладі - створимо два незалежних віджети які будуть вантажитися паралельно з власною обробкою помилок та стану завантаження:

=> Створіть новий Next.JS проект за допомогою create-next-app@latest parallel-demo

=> В теці app створіть теки @widget1 та @widget2. Назви можуть бути довільними, але обов'язково починатися з @.

Знак @ пояснює Next-у що там будуть паралельні роути. Важливо, що назва такої теки не приймає участі в роутингу. Так шлях app/@widget/login/page.tsx буде розрахований як app/login

=> В кожній з тек створіть файл page.tsx з дефолтним експортом. В компоненті напишіть щось гарне, щоб ви бачили що компоненти відображаються.

=> Тепер відкрийте layout.tsx що лежить теці app та додайте до нього наступний код:

export default function RootLayout({
widget1,
widget2,
}) {
return (
<html lang="en">
<body>
{widget1}
{widget2}
</body>
</html>
);
}


Зверніть увагу, що тепер наші віджети передані через пропси і мають таку саму назву як і назва теки, що починається з @

=> Тепер створіть новій файл в руті і покладіть туди наступний код:

export function delay({ data = 'hello world', error = '', delay = 1000 } = {}) {
return new Promise((res, rej) =>
setTimeout(() => (error ? rej(error) : res(data)), delay)
);
}


Це примітивна функція затримки, яка дає нам можливість почекати і отримати дані або кинути якусь помилку. З її допомогою ми протестуємо можливості наших роутів.

=> В перший компонент додайте виклик функції без аргументів, а в другій, передайте якийсь текст у властивість error і не забудьте зробити await:

import { delay } from '../delay';

export default async function W2() {
const sadString = await delay({ error: 'Sorry bro' });
return <>W2: {sadString}</>;
}


Тепер у вас на екрані має з'явитися дуже не гарна помилка, яка руйнує весь застосунок:

> Unhandled Runtime Error: Error: Error: Sorry bro

=> Але це дуже просто виправити. В теці другого віджету створіть файл error.tsx з дефолтним експортом і якимось змістом. Збережіть файл і тепер, замість компоненту що не зміг завантажитися, ви побачите красиву, або не дуже помилку. Але весь інший контент залишається цілим і ваш користувач все ще може працювати з застосунком!

Залишився останній крок - індикація завантаження:

=> В кожному з віджетів встановіть delay в 7000 та 4000 відповідно. Тепер ваша сторінка буде вантажитися 7 секунд, що геть не зручно для користувача. Давайте зробимо завантаження паралельним!

=> В теку з кожним віджетом додайте файл loading.tsx з дефолтним експортом. Якщо у вас з'явилася помилка default export is not a react component - перезапустіть сервер, або дайте компонентам різні імена.

❤️ Тепер, після завантаження сторінки, ви побачите, що наші віджети вантажаться індивідуально і виводяться на екран по мірі надходження даних, скажіть краса?

❗️Пам'ятайте, що назви loading.tsx, page.tsx та error.tsx є зарезервованими і змінювати їх не можна.

Код для погратися лежить тут

@reactbeginners
GitHub GitHub - Drag13/nextjs-parallel Contribute to Drag13/nextjs-parallel development by creating an account on GitHub.
  • ❤ 16
  • ❤‍🔥 3
More from @reactbeginners
  1. Sep 29, 2026Як і обіцяв - про БЗВП по свіжих слідах (і заодно про процес). У знайомого злетіло бронюва…
  2. Sep 26, 2026Думаю багатьом буде цікаво щось дізнатися про розробоку в ЗСУ Спробою розповісти трохи тог…
  3. Sep 24, 2026Всім привіт. Давно не бачилися, але до телеграму руки все ніяк не доходили. В лінкедині я…
  4. May 24, 2026Київ, співчуваю. Сам сьогодні в цю ніч був на лукьянівці. Як на мене, найважча ніч за всі.…
  5. Dec 31, 2025З новим Роком. Нехай це буде останній рік війни. А росія нехай отримує те на що заслужила.…
  6. Nov 29, 2025Сподіваюся всі живі. Схоже що це був рекордний наліт. Як бачите - путін не зацікавлений в…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →