Els hooks són una característica introduïda a React 16.8 que permeten utilitzar l'estat i altres característiques de React sense escriure una classe. En aquest mòdul, aprendrem com utilitzar els hooks a React Native per gestionar l'estat, els efectes secundaris i altres funcionalitats.
Continguts
Introducció als hooks
Els hooks permeten utilitzar l'estat i altres característiques de React en components funcionals. Els hooks més comuns són useState
i useEffect
.
Avantatges dels hooks
- Simplicitat: Els components funcionals són més fàcils de llegir i escriure.
- Reutilització de la lògica: Els hooks permeten reutilitzar la lògica de l'estat entre components.
- Millor rendiment: Els components funcionals amb hooks poden ser més eficients que les classes.
useState
El hook useState
permet afegir estat a un component funcional.
Exemple
import React, { useState } from 'react'; import { View, Text, Button } from 'react-native'; const Counter = () => { const [count, setCount] = useState(0); return ( <View> <Text>Count: {count}</Text> <Button title="Increment" onPress={() => setCount(count + 1)} /> </View> ); }; export default Counter;
Explicació
useState(0)
: Inicialitza l'estatcount
a 0.setCount
: Funció per actualitzar l'estatcount
.onPress={() => setCount(count + 1)}
: Incrementa el valor decount
en 1 quan es prem el botó.
useEffect
El hook useEffect
permet executar efectes secundaris en components funcionals, com ara sol·licituds de dades, subscripcions o manipulacions del DOM.
Exemple
import React, { useState, useEffect } from 'react'; import { View, Text } from 'react-native'; const DataFetcher = () => { const [data, setData] = useState(null); useEffect(() => { fetch('https://api.example.com/data') .then(response => response.json()) .then(data => setData(data)); }, []); return ( <View> <Text>Data: {data ? JSON.stringify(data) : 'Loading...'}</Text> </View> ); }; export default DataFetcher;
Explicació
useEffect(() => { ... }, [])
: Executa l'efecte només una vegada després del primer renderitzat.fetch('https://api.example.com/data')
: Sol·licita dades d'una API.setData(data)
: Actualitza l'estatdata
amb les dades obtingudes.
useContext
El hook useContext
permet accedir al context de React en components funcionals.
Exemple
import React, { useContext } from 'react'; import { View, Text } from 'react-native'; const MyContext = React.createContext(); const Display = () => { const value = useContext(MyContext); return ( <View> <Text>Value: {value}</Text> </View> ); }; const App = () => { return ( <MyContext.Provider value="Hello, World!"> <Display /> </MyContext.Provider> ); }; export default App;
Explicació
React.createContext()
: Crea un context.useContext(MyContext)
: Accedeix al valor del contextMyContext
.<MyContext.Provider value="Hello, World!">
: Proporciona el valor del context als components fills.
useReducer
El hook useReducer
és una alternativa a useState
per gestionar l'estat complex.
Exemple
import React, { useReducer } from 'react'; import { View, Text, Button } from 'react-native'; const initialState = { count: 0 }; function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; default: throw new Error(); } } const Counter = () => { const [state, dispatch] = useReducer(reducer, initialState); return ( <View> <Text>Count: {state.count}</Text> <Button title="Increment" onPress={() => dispatch({ type: 'increment' })} /> <Button title="Decrement" onPress={() => dispatch({ type: 'decrement' })} /> </View> ); }; export default Counter;
Explicació
useReducer(reducer, initialState)
: Inicialitza l'estat ambinitialState
i retorna l'estat actual i la funciódispatch
.dispatch({ type: 'increment' })
: Envia una acció per incrementar el comptador.dispatch({ type: 'decrement' })
: Envia una acció per decrementar el comptador.
Exercicis pràctics
Exercici 1: Crear un component de comptador amb useState
Crea un component que mostri un comptador i dos botons per incrementar i decrementar el valor del comptador.
Solució
import React, { useState } from 'react'; import { View, Text, Button } from 'react-native'; const Counter = () => { const [count, setCount] = useState(0); return ( <View> <Text>Count: {count}</Text> <Button title="Increment" onPress={() => setCount(count + 1)} /> <Button title="Decrement" onPress={() => setCount(count - 1)} /> </View> ); }; export default Counter;
Exercici 2: Utilitzar useEffect
per obtenir dades d'una API
Crea un component que obtingui dades d'una API i les mostri en pantalla.
Solució
import React, { useState, useEffect } from 'react'; import { View, Text } from 'react-native'; const DataFetcher = () => { const [data, setData] = useState(null); useEffect(() => { fetch('https://api.example.com/data') .then(response => response.json()) .then(data => setData(data)); }, []); return ( <View> <Text>Data: {data ? JSON.stringify(data) : 'Loading...'}</Text> </View> ); }; export default DataFetcher;
Conclusió
En aquest mòdul, hem après com utilitzar els hooks a React Native per gestionar l'estat, els efectes secundaris i altres funcionalitats. Els hooks com useState
, useEffect
, useContext
i useReducer
ens permeten escriure components funcionals més simples i eficients. Practica amb els exercicis proporcionats per consolidar els teus coneixements i prepara't per al següent mòdul.
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