En aquest tema, aprendrem com implementar la navegació programàtica en una aplicació React utilitzant React Router. La navegació programàtica ens permet redirigir els usuaris a diferents rutes de manera programàtica, és a dir, mitjançant codi, en lloc de fer-ho a través de la interacció directa de l'usuari amb els enllaços.
Objectius
- Comprendre què és la navegació programàtica.
- Aprendre a utilitzar el hook
useHistoryper navegar programàticament. - Implementar redireccions condicionals.
Què és la navegació programàtica?
La navegació programàtica és el procés de redirigir els usuaris a diferents rutes mitjançant codi, en lloc de fer-ho a través de la interacció directa de l'usuari amb els enllaços. Això és útil en situacions com:
- Redirigir l'usuari després d'un formulari enviat correctament.
- Redirigir l'usuari si no té permís per accedir a una pàgina.
- Navegar a una pàgina específica en resposta a un esdeveniment.
Utilitzant el hook useHistory
React Router proporciona el hook useHistory que ens permet accedir a l'historial de navegació i utilitzar-lo per redirigir els usuaris.
Exemple bàsic
A continuació, es mostra un exemple bàsic de com utilitzar useHistory per navegar programàticament:
import React from 'react';
import { useHistory } from 'react-router-dom';
const HomePage = () => {
const history = useHistory();
const handleButtonClick = () => {
// Navegar a la pàgina de perfil
history.push('/profile');
};
return (
<div>
<h1>Home Page</h1>
<button onClick={handleButtonClick}>Go to Profile</button>
</div>
);
};
export default HomePage;Explicació del codi
- Importació del hook
useHistory: ImportemuseHistorydes dereact-router-dom. - Accés a l'historial: Utilitzem
useHistoryper obtenir l'objectehistory. - Navegació programàtica: Utilitzem el mètode
pushde l'objectehistoryper navegar a la ruta/profilequan es fa clic al botó.
Redireccions condicionals
Podem utilitzar la navegació programàtica per implementar redireccions condicionals. Per exemple, podem redirigir l'usuari a la pàgina d'inici de sessió si no està autenticat.
Exemple de redirecció condicional
import React, { useEffect } from 'react';
import { useHistory } from 'react-router-dom';
const Dashboard = ({ isAuthenticated }) => {
const history = useHistory();
useEffect(() => {
if (!isAuthenticated) {
// Redirigir a la pàgina d'inici de sessió si no està autenticat
history.push('/login');
}
}, [isAuthenticated, history]);
return (
<div>
<h1>Dashboard</h1>
{isAuthenticated ? <p>Welcome to your dashboard!</p> : null}
</div>
);
};
export default Dashboard;Explicació del codi
- Prop
isAuthenticated: El componentDashboardrep una propisAuthenticatedque indica si l'usuari està autenticat. - Hook
useEffect: UtilitzemuseEffectper executar codi quan el component es renderitza. - Redirecció condicional: Si
isAuthenticatedésfalse, utilitzemhistory.pushper redirigir l'usuari a la pàgina d'inici de sessió.
Exercicis pràctics
Exercici 1: Navegació programàtica bàsica
Crea un component LoginPage que redirigeixi a la pàgina de perfil (/profile) quan es faci clic a un botó "Login".
Solució
import React from 'react';
import { useHistory } from 'react-router-dom';
const LoginPage = () => {
const history = useHistory();
const handleLogin = () => {
// Navegar a la pàgina de perfil
history.push('/profile');
};
return (
<div>
<h1>Login Page</h1>
<button onClick={handleLogin}>Login</button>
</div>
);
};
export default LoginPage;Exercici 2: Redirecció condicional
Crea un component ProtectedPage que redirigeixi a la pàgina d'inici de sessió (/login) si l'usuari no està autenticat.
Solució
import React, { useEffect } from 'react';
import { useHistory } from 'react-router-dom';
const ProtectedPage = ({ isAuthenticated }) => {
const history = useHistory();
useEffect(() => {
if (!isAuthenticated) {
// Redirigir a la pàgina d'inici de sessió si no està autenticat
history.push('/login');
}
}, [isAuthenticated, history]);
return (
<div>
<h1>Protected Page</h1>
{isAuthenticated ? <p>Welcome to the protected page!</p> : null}
</div>
);
};
export default ProtectedPage;Resum
En aquest tema, hem après com implementar la navegació programàtica en una aplicació React utilitzant React Router. Hem vist com utilitzar el hook useHistory per navegar programàticament i com implementar redireccions condicionals. Aquests conceptes són fonamentals per crear aplicacions React dinàmiques i interactives.
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
