Introducció
Les rutes niades permeten crear una jerarquia de rutes dins d'una aplicació React utilitzant React Router. Això és especialment útil per a aplicacions amb una estructura complexa, on diferents components necessiten ser renderitzats dins d'altres components en funció de la ruta actual.
Objectius
- Comprendre què són les rutes niades.
- Aprendre a configurar rutes niades amb React Router.
- Veure exemples pràctics de rutes niades.
- Realitzar exercicis pràctics per reforçar els conceptes apresos.
Què són les rutes niades?
Les rutes niades són rutes que es defineixen dins d'altres rutes. Això permet que una aplicació tingui una estructura de navegació més complexa i organitzada. Per exemple, una aplicació de comerç electrònic podria tenir una ruta principal per a "Productes" i rutes niades per a "Detalls del producte" i "Opinions del producte".
Configuració de rutes niades amb React Router
Instal·lació de React Router
Abans de començar, assegura't de tenir React Router instal·lat en el teu projecte. Pots instal·lar-lo utilitzant npm o yarn:
o
Configuració bàsica
- Crear un component principal amb rutes niades:
// App.js import React from 'react'; import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom'; import Home from './components/Home'; import Products from './components/Products'; import ProductDetails from './components/ProductDetails'; import ProductReviews from './components/ProductReviews'; function App() { return ( <Router> <div> <nav> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/products">Products</Link></li> </ul> </nav> <Switch> <Route exact path="/" component={Home} /> <Route path="/products" component={Products} /> </Switch> </div> </Router> ); } export default App;
- Definir les rutes niades dins del component
Products
:
// components/Products.js import React from 'react'; import { Route, Link, useRouteMatch } from 'react-router-dom'; import ProductDetails from './ProductDetails'; import ProductReviews from './ProductReviews'; function Products() { let { path, url } = useRouteMatch(); return ( <div> <h2>Products</h2> <ul> <li><Link to={`${url}/details`}>Product Details</Link></li> <li><Link to={`${url}/reviews`}>Product Reviews</Link></li> </ul> <Route path={`${path}/details`} component={ProductDetails} /> <Route path={`${path}/reviews`} component={ProductReviews} /> </div> ); } export default Products;
- Crear els components
ProductDetails
iProductReviews
:
// components/ProductDetails.js import React from 'react'; function ProductDetails() { return ( <div> <h3>Product Details</h3> <p>Here are the details of the product.</p> </div> ); } export default ProductDetails;
// components/ProductReviews.js import React from 'react'; function ProductReviews() { return ( <div> <h3>Product Reviews</h3> <p>Here are the reviews of the product.</p> </div> ); } export default ProductReviews;
Exemple pràctic
Estructura del projecte
Codi complet
// src/index.js import React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; ReactDOM.render(<App />, document.getElementById('root'));
// src/App.js import React from 'react'; import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom'; import Home from './components/Home'; import Products from './components/Products'; function App() { return ( <Router> <div> <nav> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/products">Products</Link></li> </ul> </nav> <Switch> <Route exact path="/" component={Home} /> <Route path="/products" component={Products} /> </Switch> </div> </Router> ); } export default App;
// src/components/Home.js import React from 'react'; function Home() { return ( <div> <h2>Home</h2> </div> ); } export default Home;
// src/components/Products.js import React from 'react'; import { Route, Link, useRouteMatch } from 'react-router-dom'; import ProductDetails from './ProductDetails'; import ProductReviews from './ProductReviews'; function Products() { let { path, url } = useRouteMatch(); return ( <div> <h2>Products</h2> <ul> <li><Link to={`${url}/details`}>Product Details</Link></li> <li><Link to={`${url}/reviews`}>Product Reviews</Link></li> </ul> <Route path={`${path}/details`} component={ProductDetails} /> <Route path={`${path}/reviews`} component={ProductReviews} /> </div> ); } export default Products;
// src/components/ProductDetails.js import React from 'react'; function ProductDetails() { return ( <div> <h3>Product Details</h3> <p>Here are the details of the product.</p> </div> ); } export default ProductDetails;
// src/components/ProductReviews.js import React from 'react'; function ProductReviews() { return ( <div> <h3>Product Reviews</h3> <p>Here are the reviews of the product.</p> </div> ); } export default ProductReviews;
Exercicis pràctics
Exercici 1
Objectiu: Afegir una nova ruta niada per a "Product Specifications".
- Crea un nou component
ProductSpecifications.js
dins de la carpetacomponents
. - Afegeix una nova ruta niada per a "Product Specifications" dins del component
Products
. - Actualitza la navegació per incloure un enllaç a "Product Specifications".
Solució:
// src/components/ProductSpecifications.js import React from 'react'; function ProductSpecifications() { return ( <div> <h3>Product Specifications</h3> <p>Here are the specifications of the product.</p> </div> ); } export default ProductSpecifications;
// src/components/Products.js import React from 'react'; import { Route, Link, useRouteMatch } from 'react-router-dom'; import ProductDetails from './ProductDetails'; import ProductReviews from './ProductReviews'; import ProductSpecifications from './ProductSpecifications'; function Products() { let { path, url } = useRouteMatch(); return ( <div> <h2>Products</h2> <ul> <li><Link to={`${url}/details`}>Product Details</Link></li> <li><Link to={`${url}/reviews`}>Product Reviews</Link></li> <li><Link to={`${url}/specifications`}>Product Specifications</Link></li> </ul> <Route path={`${path}/details`} component={ProductDetails} /> <Route path={`${path}/reviews`} component={ProductReviews} /> <Route path={`${path}/specifications`} component={ProductSpecifications} /> </div> ); } export default Products;
Conclusió
Les rutes niades són una eina poderosa per organitzar la navegació dins d'una aplicació React. Permeten crear una estructura de rutes més complexa i jeràrquica, facilitant la gestió de components i la navegació dins de l'aplicació. Amb la pràctica, es poden crear aplicacions React robustes i ben organitzades utilitzant rutes niades.
Curs de React
Mòdul 1: Introducció a React
- Què és React?
- Configuració de l'entorn de desenvolupament
- Hola Món en React
- JSX: Extensió de la sintaxi de JavaScript
Mòdul 2: Components de React
- Comprendre els components
- Components funcionals vs components de classe
- Props: Passar dades als components
- State: Gestionar l'estat del component
Mòdul 3: Treballar amb esdeveniments
- Gestionar esdeveniments en React
- Renderització condicional
- Llistes i claus
- Formularis i components controlats
Mòdul 4: Conceptes avançats de components
- Elevar l'estat
- Composició vs herència
- Mètodes del cicle de vida de React
- Hooks: Introducció i ús bàsic
Mòdul 5: Hooks de React
Mòdul 6: Enrutament en React
Mòdul 7: Gestió de l'estat
- Introducció a la gestió de l'estat
- API de context
- Redux: Introducció i configuració
- Redux: Accions i reductors
- Redux: Connexió amb React
Mòdul 8: Optimització del rendiment
- Tècniques d'optimització del rendiment de React
- Memorització amb React.memo
- Hooks useMemo i useCallback
- Divisió de codi i càrrega mandrosa
Mòdul 9: Proves en React
- Introducció a les proves
- Proves unitàries amb Jest
- Proves de components amb React Testing Library
- Proves de punta a punta amb Cypress
Mòdul 10: Temes avançats
- Renderització del costat del servidor (SSR) amb Next.js
- Generació de llocs estàtics (SSG) amb Next.js
- TypeScript amb React
- React Native: Construir aplicacions mòbils