⊗jsrtPmRtPR 47 of 47 menu

Trasa bez cesty v React Router

V této lekci se podíváme na další užitečnou vlastnost trasy bez cesty.

Víte, že pro každý objekt trasy můžete přidat vlastnost errorElement a jako hodnotu nastavit prvek, který chcete zobrazit při výskytu chyby.

Ale co když bude errorElement stejný pro všechny trasy? Lze samozřejmě přidat to samé pro každou, nebo lze využít trasu bez cesty, obalit jí nás zajímající podřízené trasy. Pak v případě výskytu chyby na jedné z nich, naše trasa bez cesty je bude zachycovat a zobrazovat svůj errorElement.

Pojďme do souboru main.jsx a obalme trasou bez cesty všechny naše podřízené trasy, čímž z nich uděláme jeho podřízené (naopak tato trasa se stane podřízenou kořenové), nezapomeneme jí také přidat vlastnost errorElement:

const router = createBrowserRouter([ { path: '/', element: <Root />, errorElement: <ErrorPage404 />, loader: rootLoader, action: rootAction, children: [ { errorElement: <ErrorPage404 />, children: [ { index: true, element: <Index /> }, { path: 'products/:productId', element: <Product />, loader: productLoader, }, { path: 'products/:productId/edit', element: <EditProduct />, loader: editProductLoader, action: editAction, }, { path: 'products/:productId/delete', action: deleteAction, }, ], }, ], }, ]);

Jak nyní ověřit fungování tohoto kódu? Lze přidat řádek s vyhozením chyby (nezapomeňte ji pak odstranit, až ověříte). Přidejme například jej jako první řádek do funkce action pro trasu odstranění produktu, pak při pokusu o odstranění produktu uvidíme chybu:

export async function action({ params }) { throw new Error('error'); await deleteProduct(params.productId); return redirect('/'); }

Nyní zkuste odstranit nějaký produkt.

Vezměte aplikaci, kterou jste vytvořili v úkolech k předchozím lekcím. Využijte materiály lekce, obalte vaše podřízené trasy v trasu bez cesty s vlastností errorElement a ověřte, že to funguje.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout