Skip to content
Kezdőlap » useEffect

useEffect

A useEffect hook-ot olyan műveletek végrehajtására használjuk, amiket egy függvény alapú komponens törzsében nem lehetne elhelyezni. Ennek oka, hogy ez a React-nek a renderelési fázisa. Erre a célra lehet tehát használni.

useEffect
A kép innen jött. Köszönöm!

Egy függvényt adunk át neki paraméterként, ami az után fut le, hogy a komponens renderelése megtörtént. Alapesetben az effektek lefutnak minden egyes befejeződött renderelés után, azonban a lefutást lehet befolyásolni úgy, hogy akkor fussanak le, amikor egy bizonyos érték megváltozik.

Használat

Mivel a React-nek a része, ezért a react csomag tartalmazza. Használathoz mindenképpen importálni kell:

import { useEffect } from "react";

Ha már a használatnál tartunk, akkor el kell mondani, hogy általában olyan kódokat szeretünk futtatni useEffect-el, amik ráérnek a render fázis után is lefutni és egyébként feleslegesen is blokkolnák a renderelési folyamatot. Például logolások, feliratkozások, stb.

Példa

A következő példában azt csináljuk, hogy megszámoljuk hányszor történt meg a renderelés és azt megjelenítjük a képernyőn. Használjuk a useState hook-ot is a számláló értékének a megváltoztatásához:

const [count, setCount] = useState(0);

A count state értéke kezdetben 0, tehát még a renderelés előtt vagyunk. A useEffect annyit fog csinálni, hogy egy setTimeout használatával, 1 másodperc eltelte után megnöveli a számláló értékét:

  useEffect(() => {
    setTimeout(() => {
      setCount((count) => count + 1);
    }, 1000);
  }, [])

Így jelenítjük meg:

  return (
    <View style={styles.container}>
      <Text style={styles.paragraph}>Render counter: <strong>{count}</strong></Text>
    </View>
  );

A useEffect első paramétere egy függvény volt. A második paramétere pedig egy üres tömb. Ebbe a tömbbe azok a feltételek kerülnek, akik kiváltják a useEffect-nek átadott függvény meghívását. Ha nem adunk meg semmilyen feltételt, azaz üres tömböt adunk csak meg, akkor ebben az esetben egyetlen egyszer fut le a useEffect-ben levő kód. Tehát a számláló 0 értékről indul, aztán átvált 1-re.

Ha folyamatosan növekvő számlálót akarunk készíteni, akkor így kell módosítani a useEffect-et:

 useEffect(() => {
    setTimeout(() => {
      setCount((count) => count + 1);
    }, 1000);
  }, [<strong>count</strong>])

Vagyis a feltétel tömbben megadtunk egy olyan feltételt, hogy a useEffect-ben megadott kód fusson le valahányszor a count értéke megváltozik.

Címkék: