[[oktatas:telefon:react_native|< React Native]] ====== Kampók ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2021, 2023 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Állapot kampók ===== A horgok (vagy kampók) React 16.8 verzióban jelentek meg. ===== useState ===== A useState egy horog, amit függvény egy függvénybe írva állapotokat tárolhatunk, amíg a képernyő újrarendelődik. A useState egy párt ad vissza. Az egyik része az állapot, a másik egy függvény amivel beállíthatjuk az állapotot. A függvényt meghívhatjuk bárhol. A függvénynek van egy bemenő paramétere, amely meghatározza a kezdeti értéket. function valami() { const [name, setName] = useState('Névtelen'); const [city, setCity] = useState('ismeretlen'); const [salary, setSalary] = useState(2350000); const [degree, setDegree] = useState([]); } Horgokat nem használhatunk osztálykomponensekben, éppen a React használatát teszik lehetővé osztály nélkül. ==== Importálás ==== import {useState} from 'react'; export default function App() { const [counter, setCounter] = useState(0); return (); } import React from 'react'; export default function App() { const [counter, setCounter] = React.useState(0); return (); } ===== useEffect ===== Mellékhatások elvégzésére kitalált függvény. Célja a felület megjelenítését elválasztani a mellékhatással járó tevékenységekkel. A felület megjelenítése és frissítése folyamatosan történik. A mellékhatásnál ezt nem szeretnénk. Például adatlehívás, feliratkozás, DOM változtatása React komponensből. useEffect(() => { fetch(dataURL) .then((response) => response.json()) .then((data) => { setData(data.friends); setTitle(data.title); setDesc(data.desc); }) .catch((error) => alert(error)) .finally(()=>setLoading(false)); }); Ha a letöltött adat egy tömb: const [isLoading, setLoading] = useState(true); const [data, setData] = useState([]); useEffect(() => { fetch(dataURL) .then((response) => response.json()) .then((data) => { setData(data); }) .catch((error) => alert(error)) .finally(()=>setLoading(false)); }, []); ==== Függőség megadása ==== A useEffect() második paramétereként megadott függőség a counter. Ha a caounter változik, akkor lefut a useEffect() első paraméterében megadott névtelen függvény. const [counter, setCounter] = useState(0); useEffect(() => { console.log(counter.toString()) }, [counter]); A második paraméter egy tömb. Ha üresen hagyjuk, akkor csak a komponens inicializálásakor fut le. ===== Szabályok ===== Horgokat nem hívhatunk csak a legfelsőbb szinten. A horgokat csak React függvényekből hívjuk. ===== Kezdőérték ===== const [images, setImages] = useState([ require('./assets/kep1.png'), require('./assets/kep2.png'), require('./assets/kep3.png'), require('./assets/kep4.png'), require('./assets/kep5.png') ]); const [images, setImages] = useState([ {src:require('./assets/kep1.png'),key:'1'}, {src:require('./assets/kep2.png'),key:'2'}, {src:require('./assets/kep3.png'),key:'3'}, {src:require('./assets/kep4.png'),key:'4'}, {src:require('./assets/kep5.png'),key:'5'} ]); Példa a listában felhasználva: ( )} />