Introducció a Redux
Redux és una biblioteca de gestió de l'estat per a aplicacions JavaScript, sovint utilitzada amb React. Proporciona una manera previsible de gestionar l'estat de l'aplicació, facilitant el desenvolupament d'aplicacions que es comporten de manera consistent, poden ser testejades fàcilment i funcionen en diferents entorns (client, servidor, natiu, etc.).
Conceptes clau de Redux
- Store: L'emmagatzematge centralitzat de l'estat de l'aplicació.
- Actions: Objectes que descriuen el que ha passat.
- Reducers: Funcions pures que especifiquen com canvia l'estat de l'aplicació en resposta a una acció.
- Dispatch: Mètode per enviar accions al store.
- Selectors: Funcions per obtenir dades de l'estat.
Configuració de Redux
Instal·lació
Per començar a utilitzar Redux amb React, necessitem instal·lar les biblioteques redux
i react-redux
.
Creació del Store
El primer pas és crear el store de Redux. El store és l'objecte que conté l'estat de l'aplicació.
// src/store.js import { createStore } from 'redux'; import rootReducer from './reducers'; const store = createStore(rootReducer); export default store;
Creació del Reducer
Els reducers són funcions pures que prenen l'estat actual i una acció, i retornen un nou estat.
// src/reducers/index.js const initialState = { count: 0 }; function rootReducer(state = initialState, action) { switch (action.type) { case 'INCREMENT': return { ...state, count: state.count + 1 }; case 'DECREMENT': return { ...state, count: state.count - 1 }; default: return state; } } export default rootReducer;
Proveir el Store a l'Aplicació
Utilitzem el component Provider
de react-redux
per proveir el store a l'aplicació.
// src/index.js import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; import store from './store'; import App from './App'; ReactDOM.render( <Provider store={store}> <App /> </Provider>, document.getElementById('root') );
Connectar Components a Redux
Per connectar un component a Redux, utilitzem la funció connect
de react-redux
.
// src/components/Counter.js import React from 'react'; import { connect } from 'react-redux'; function Counter({ count, increment, decrement }) { return ( <div> <h1>{count}</h1> <button onClick={increment}>Increment</button> <button onClick={decrement}>Decrement</button> </div> ); } const mapStateToProps = (state) => ({ count: state.count }); const mapDispatchToProps = (dispatch) => ({ increment: () => dispatch({ type: 'INCREMENT' }), decrement: () => dispatch({ type: 'DECREMENT' }) }); export default connect(mapStateToProps, mapDispatchToProps)(Counter);
Exercicis Pràctics
Exercici 1: Crear una acció personalitzada
- Descripció: Crea una nova acció que reseteja el comptador a zero.
- Passos:
- Afegeix un nou cas al reducer per gestionar l'acció
RESET
. - Afegeix un nou botó al component
Counter
que despatxa l'accióRESET
.
- Afegeix un nou cas al reducer per gestionar l'acció
Solució
// src/reducers/index.js const initialState = { count: 0 }; function rootReducer(state = initialState, action) { switch (action.type) { case 'INCREMENT': return { ...state, count: state.count + 1 }; case 'DECREMENT': return { ...state, count: state.count - 1 }; case 'RESET': return { ...state, count: 0 }; default: return state; } } export default rootReducer;
// src/components/Counter.js import React from 'react'; import { connect } from 'react-redux'; function Counter({ count, increment, decrement, reset }) { return ( <div> <h1>{count}</h1> <button onClick={increment}>Increment</button> <button onClick={decrement}>Decrement</button> <button onClick={reset}>Reset</button> </div> ); } const mapStateToProps = (state) => ({ count: state.count }); const mapDispatchToProps = (dispatch) => ({ increment: () => dispatch({ type: 'INCREMENT' }), decrement: () => dispatch({ type: 'DECREMENT' }), reset: () => dispatch({ type: 'RESET' }) }); export default connect(mapStateToProps, mapDispatchToProps)(Counter);
Conclusió
En aquesta secció, hem après els conceptes bàsics de Redux i com configurar-lo en una aplicació React. Hem creat un store, un reducer, i hem connectat un component a Redux. A més, hem practicat la creació d'una acció personalitzada. En el proper mòdul, explorarem més a fons les accions i els reductors, i veurem com gestionar estats més complexos.
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