Introducció
La Context API de React és una eina poderosa que permet compartir dades entre components sense necessitat de passar explícitament les props a través de cada nivell de l'arbre de components. Això és especialment útil en aplicacions grans on moltes dades necessiten ser accessibles per molts components diferents.
Conceptes Clau
- Context: Un objecte que permet compartir dades entre components sense necessitat de passar props manualment a través de cada nivell.
- Provider: Un component que proporciona el context als seus fills.
- Consumer: Un component que consumeix el context proporcionat pel Provider.
Creació d'un Context
Per crear un context, utilitzem la funció React.createContext()
. Aquesta funció retorna un objecte amb dos components: Provider
i Consumer
.
Utilització del Provider
El Provider
és un component que envolta els components que necessiten accedir al context. Proporciona el valor del context a tots els components fills.
import React from 'react'; import { View, Text } from 'react-native'; // Creem el context const MyContext = React.createContext(); const App = () => { return ( <MyContext.Provider value="Hola, món!"> <MyComponent /> </MyContext.Provider> ); }; const MyComponent = () => { return ( <View> <MyContext.Consumer> {value => <Text>{value}</Text>} </MyContext.Consumer> </View> ); }; export default App;
Utilització del Consumer
El Consumer
és un component que consumeix el valor del context proporcionat pel Provider
. Utilitza una funció de renderització per accedir al valor del context.
const MyComponent = () => { return ( <View> <MyContext.Consumer> {value => <Text>{value}</Text>} </MyContext.Consumer> </View> ); };
Exemple Pràctic
A continuació, es mostra un exemple pràctic d'ús de la Context API per compartir un estat global entre components.
Creació del Context
import React, { useState } from 'react'; import { View, Text, Button } from 'react-native'; // Creem el context const CounterContext = React.createContext(); const App = () => { const [count, setCount] = useState(0); return ( <CounterContext.Provider value={{ count, setCount }}> <View> <CounterDisplay /> <CounterButtons /> </View> </CounterContext.Provider> ); }; const CounterDisplay = () => { return ( <CounterContext.Consumer> {({ count }) => <Text>Count: {count}</Text>} </CounterContext.Consumer> ); }; const CounterButtons = () => { return ( <CounterContext.Consumer> {({ setCount }) => ( <View> <Button title="Increment" onPress={() => setCount(prev => prev + 1)} /> <Button title="Decrement" onPress={() => setCount(prev => prev - 1)} /> </View> )} </CounterContext.Consumer> ); }; export default App;
Exercicis Pràctics
Exercici 1: Crear un Context per a l'Usuari
- Crea un context per a gestionar la informació de l'usuari (nom i correu electrònic).
- Proporciona el context a través d'un
Provider
en el component principal. - Consumeix el context en un component fill per mostrar la informació de l'usuari.
Solució
import React, { useState } from 'react'; import { View, Text } from 'react-native'; // Creem el context const UserContext = React.createContext(); const App = () => { const [user, setUser] = useState({ name: 'John Doe', email: '[email protected]' }); return ( <UserContext.Provider value={user}> <View> <UserProfile /> </View> </UserContext.Provider> ); }; const UserProfile = () => { return ( <UserContext.Consumer> {user => ( <View> <Text>Name: {user.name}</Text> <Text>Email: {user.email}</Text> </View> )} </UserContext.Consumer> ); }; export default App;
Exercici 2: Actualitzar el Context
- Afegeix una funció per actualitzar la informació de l'usuari en el context.
- Proporciona aquesta funció a través del
Provider
. - Consumeix la funció en un component fill per permetre l'actualització de la informació de l'usuari.
Solució
import React, { useState } from 'react'; import { View, Text, Button } from 'react-native'; // Creem el context const UserContext = React.createContext(); const App = () => { const [user, setUser] = useState({ name: 'John Doe', email: '[email protected]' }); const updateUser = (newUser) => { setUser(newUser); }; return ( <UserContext.Provider value={{ user, updateUser }}> <View> <UserProfile /> <UpdateUserButton /> </View> </UserContext.Provider> ); }; const UserProfile = () => { return ( <UserContext.Consumer> {({ user }) => ( <View> <Text>Name: {user.name}</Text> <Text>Email: {user.email}</Text> </View> )} </UserContext.Consumer> ); }; const UpdateUserButton = () => { return ( <UserContext.Consumer> {({ updateUser }) => ( <Button title="Update User" onPress={() => updateUser({ name: 'Jane Doe', email: '[email protected]' })} /> )} </UserContext.Consumer> ); }; export default App;
Conclusió
La Context API de React és una eina poderosa per gestionar l'estat global en aplicacions React Native. Permet compartir dades entre components sense necessitat de passar props manualment a través de cada nivell de l'arbre de components. Amb la pràctica, es pot utilitzar la Context API per simplificar la gestió de l'estat en aplicacions complexes.
En el següent tema, explorarem els Hooks a React Native, que ens permetran gestionar l'estat i els efectes col·laterals de manera més eficient.
Curs de React Native
Mòdul 1: Introducció a React Native
- Què és React Native?
- Configuració de l'entorn de desenvolupament
- Aplicació Hello World
- Comprendre JSX
- Components i Props
Mòdul 2: Components bàsics i estilització
- Visió general dels components bàsics
- Text, View i Image
- Estilització amb Flexbox
- Gestió de l'entrada de l'usuari
- ScrollView i ListView
Mòdul 3: Estat i cicle de vida
- Mètodes d'estat i cicle de vida
- Gestió d'esdeveniments
- Renderització condicional
- Llistes i claus
- Formularis i components controlats
Mòdul 4: Navegació
- Introducció a React Navigation
- Stack Navigator
- Tab Navigator
- Drawer Navigator
- Passar paràmetres a les rutes
Mòdul 5: Xarxes i dades
- Obtenir dades amb Fetch API
- Utilitzar Axios per a sol·licituds HTTP
- Gestió d'errors de xarxa
- AsyncStorage per a dades locals
- Integració amb APIs REST
Mòdul 6: Conceptes avançats
Mòdul 7: Desplegament i publicació
- Construcció per a iOS
- Construcció per a Android
- Publicació a l'App Store
- Publicació a Google Play
- Integració i lliurament continus