2023. 8. 20. 20:48ใStudy_Develop/React Native
React์ React Native๋ฅผ ์ฌ์ฉํ ๋ ์ ์ฉํ Lifecycle, useEffect๋ฅผ ๊ณต๋ถํด๋ณด์.
์ฝ๊ฒ ๋งํด ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๊ณ ์ ๊ฑฐ๋ ๋ ํน์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด Lifecycle์ด๋ค.
์ปดํฌ๋ํธ์ ์ธ์์ด๋ผ๊ณ ์ดํดํ๋ฉด ์ฝ๋ค.
ํ์ด์ง์ ์ฅ์ฐฉ๋๊ฑฐ๋ (mount), ์ ๋ฐ์ดํธ ๋๊ฑฐ๋(update), ํ์์์ผ๋ฉด ์ ๊ฑฐ๋๊ฑฐ๋ (unmount)
LifeCycle ๋?
์์ ๊ทธ๋ฆผ์ ํฌ๊ฒ4๊ฐ์ง๋ก ๋ถ๋ฅํ ์ ์๋ค.
Mount : ์ปดํฌ๋ํธ ์ฒ์ ์คํ์์ผฐ์ ๋์ ์ํ
state, props, context ์ ์ฅ -> componentWillMount()-> render() -> componentDidMount() (์ฃผ๋ก ์๋ฒ์ ๋ฐ์ดํฐ ์์ฒญ)
Update- prop : props๊ฐ ์ ๋ฐ์ดํธ ๋ ๋
componentWillRecieveProps() (props๊ฐ ๋ณ๊ฒฝ๋ ๋ ๊ฐ์ง) → shouldComponentUpdate() ( component ์
๋ฐ์ดํธ ํ ๊บผ์ผ?)
→ componentWillUpdate() (component๊ฐ ์
๋ฐ์ดํธ ๋ ๋) → render() → compoentDidUpdate() (component ๊ฐ ์
๋ฐ์ดํธ ๋ ํ)
Update -state : State๊ฐ ์
๋ฐ์ดํธ ๋ ๋
*Props์ ์ฐจ์ด์ ์ componentWillRecieveProps์ ํธ์ถํ์ง ์๋๋ค
๋ฉ์๋๋ค์ด ๋ฐ๋ state์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์๊ณ componentDidUpdate๋ ๋ฐ๋๊ธฐ ์ ์ state๋ฅผ ๊ฐ๊ณ ์์
shouldComponentUpdate() → componentWillUpdate() → render() → compoentDidUpdate()
Unmount : ์ปดํฌ๋ํธ ์ ๊ฑฐ ๋ ๋
Error : ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋
์๋ฒ ํต์ ์ ์คํจํ์ ๋ ์๋ฌ ํ์ด์ง ๋ง๋ค ๋ ์ฌ์ฉ
Lifecycle hook ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
import {useState, useEffect} from 'react';
function LifeCycleHook(){
useEffect(()=>{
//์ฌ๊ธฐ์ ์ ์ฝ๋๋ ์ปดํฌ๋ํธ ๋ก๋ & ์
๋ฐ์ดํธ ๋ง๋ค ์คํ๋จ
console.log('์๋
')
});
return (์๋ต)
}
๋๋ต์ ์ธ ํํ์ด๋ค.
์๋จ์์ useEffect importํด์ค๊ณ ,
์ฝ๋ฐฑํจ์ ์ถ๊ฐํด์ ์์ ์ฝ๋ ์ ์ผ๋ฉด ์ด์ ๊ทธ ์ฝ๋๋ ์ปดํฌ๋ํธ๊ฐ mount & update์ ์คํ๋๋ค.
๊ทธ๋์ ์ด๊ฒ Lifecycle hook ์ด๋ค.
useEffect ํน์ง
- useEffect ๋ฐ๊ฐ์ ์ ์ด๋ ๋๊ฐ์ด ์ปดํฌ๋ํธ mount & update์ ์คํ์ด ๋๋ค.
( ์ปดํฌ๋ํธ๊ฐ mount & update์ functon ์์ ์๋ ์ฝ๋๋ ๋ค์ ์ฝ๊ณ ์ง๋๊ฐ์ ๊ทธ๋ ๋ค.)
- useEffect ์์ ์ ์ ์ฝ๋๋ html ๋ ๋๋ง ์ดํ์ ๋์์ ํ๋ค.
- ์๋ฅผ ๋ค์ด, ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์ธ๋ฐ ์๋ ์ฝ๋๊ฐ ํ์ํ๋ค๋ฉด?
function Detail(){
(๋ฐ๋ณต๋ฌธ 10์ต๋ฒ ๋๋ฆฌ๋ ์ฝ๋)
return (์๋ต)
}
-> ์ฌ๊ธฐ์ ๋์ถฉ ์ ์ผ๋ฉด ๋ฐ๋ณต๋ฌธ ๋๋ฆฌ๊ณ ๋์ ํ๋จ์ html์ ๋ณด์ฌ์ค๋ค.
function Detail(){
useEffect(()=>{
(๋ฐ๋ณต๋ฌธ 10์ต๋ฒ ๋๋ฆฌ๋ ์ฝ๋)
});
return (์๋ต)
}
-> useEffect์์ ์ ์ผ๋ฉด html ๋ณด์ฌ์ฃผ๊ณ ๋์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฐ๋ค.
- ์ด๋ฐ์์ผ๋ก ์ฝ๋์ ์คํ ์์ ์ ์กฐ์ ํ ์ ์๋ค.
- ํจ์์ ํต์ฌ ๊ธฐ๋ฅ ์ด์ธ์ ์ธ ๋ฐ ์๋ ๊ธฐ๋ฅ๋ค์ ํ๋ก๊ทธ๋๋ฐ ์ฉ์ด๋ก side effect๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ์ปดํฌ๋ํธ์ ํต์ฌ ๊ธฐ๋ฅ์ html๋ ๋๋ง์ด๋ผ ๊ทธ๊ฑฐ ์ธ์ ์ธ๋ฐ ์๋ ๊ธฐ๋ฅ๋ค์ useEffect ์์ ๋ฃ๋ ๊ฒ์ด ์ข๋ค. (์ค๋๊ฑธ๋ฆฌ๋ ๋ฐ๋ณต์ฐ์ฐ, ์๋ฒ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๋ ์์ , ํ์ด๋จธ ๋ฑ)
useEffect์ ๋ฃ์ ์ ์๋ ์คํ์กฐ๊ฑด
useEffect(()=> { ์คํํ ์ฝ๋ }, [count])
useEffect()์ ๋์งธ ํ๋ผ๋ฏธํฐ๋ก [ ]๋ฅผ ๋ฃ์ ์ ์๋๋ฐ, ๊ฑฐ๊ธฐ์ ๋ณ์๋ state๊ฐ์ ๊ฒ๋ค์ ๋ฃ์ ์ ์๋ค.
๊ทธ๋ ๊ฒ ํ๋ฉด [ ]์ ์๋ ๋ณ์๋ state๊ฐ ๋ณํ ๋๋ง useEffect ์์ ์ฝ๋๋ฅผ ์คํํด์ค๋ค.
์์ ์ฝ๋๋ count๋ผ๋ ๋ณ์๊ฐ ๋ณํ ๋๋ง useEffect์์ ์ฝ๋๊ฐ ์คํ๋๋ค.
useEffect(()=> { ์คํํ ์ฝ๋ }, [])
์๋ฌด๊ฒ๋ ์ ๋ฃ์ผ๋ฉด ์ปดํฌ๋ํธ mount์ (๋ก๋์) 1ํ ์คํํ๊ณ ์์์คํํ์ง ์๋๋ค.
useEffect(()=>{
๊ทธ ๋ค์ ์คํ๋จ
return ()=>{
์ฌ๊ธฐ์๋๊ฒ ๋จผ์ ์คํ๋จ
}
}, [count])
๊ทธ๋ผ useEffect ์์ ์๋ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ return ()=> {}์์ ์๋ ์ฝ๋๋ฅผ ์คํํ๋ค.
์ฐธ๊ณ ๋ก ์ด๋ฐ ๊ฒ์ clean up function์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
clean up function์ด ์ ์๊ฒผ๋?
์๋ฅผ ๋ค์ด, ๋ฒํผ์ ๋๋ฅด๋ฉด setTimeout ํจ์๊ฐ ์คํ๋๋ ์ฝ๋์์
setTimeout() ์ธ ๋๋ง๋ค ๋ธ๋ผ์ฐ์ ์์ ํ์ด๋จธ๊ฐ ํ๋ ์๊ธด๋ค.
๊ทธ๋ผ useEffect์์ ์ป๊ธฐ ๋๋ฌธ์ ์ปดํฌ๋ํธ๊ฐ mount๋ ๋๋ง๋ค ์คํ๋๋ค.
๊ทธ๋ผ ์๋ชป ์ฝ๋๋ฅผ ์ง๋ฉด ํ์ด๋จธ๊ฐ 100๊ฐ 1000๊ฐ ์์ฑ๋ ์ ์๋ค.
๋์ค์ ๊ทธ๋ฐ ๋ฒ๊ทธ๋ฅผ ๋ฐฉ์งํ๊ณ ์ถ์ผ๋ฉดuseEffect์์ ํ์ด๋จธ ๋ง๋ค๊ธฐ ์ ์ ๊ธฐ์กด ํ์ด๋จธ๋ฅผ ์น ์ ๊ฑฐํ๋ผ๊ณ ์ฝ๋๋ฅผ ์ง๋ฉด ๋๋๋ฐ
๊ทธ๋ฐ๊ฑฐ ์งค ๋ return ()=>{} ์์ ์ง๋ฉด ๋๋ค.
useEffect(()=>{
let a = setTimeout(()=>{ setAlert(false) }, 2000)
return ()=>{
clearTimeout(a)
}
}, [])
์ด๋ฐ ์์ผ๋ก ํ์ด๋จธ๋ฅผ ์ ๊ฑฐํ๋ค!
โclean up function์๋ ํ์ด๋จธ ์ ๊ฑฐ, socket ์ฐ๊ฒฐ ์์ฒญ ์ ๊ฑฐ, ajax ์์ฒญ ์ค๋จ ์ด๋ฐ ์ฝ๋๋ฅผ ๋ง์ด ์์ฑํ๋ค.
โ์ปดํฌ๋ํธ unmount์์๋ clean up function ์์ ์๋๊ฒ 1ํ ์คํ๋๋ค.
๊ฐ๋จ ์ ๋ฆฌ !!
useEffect(()=> { ์คํํ ์ฝ๋ })
-> ์ฌ๋ ๋๋ง ๋ง๋ค ์ฝ๋๋ฅผ ์คํํ๋ค.
useEffect(()=> { ์คํํ ์ฝ๋ }, [])
-> ์ด๋ฌ๋ฉด ์ปดํฌ๋ํธ mount ์ (๋ก๋์) 1ํ๋ง ์คํ๊ฐ๋ฅํ๋ค.
useEffect(()=> {
return () => {
์คํํ ์ฝ๋
}
})
-> useEffect ์์ ์ฝ๋ ์คํ ์ ์ ํญ์ ์คํ๋๋ค.
useEffect(()=> {
return () =>{
์คํํ ์ฝ๋
}
}, [])
-> ์ปดํฌ๋ํธ unmount์ 1ํ ์คํ๋๋ค.
useEffect(()=>{
์คํํ ์ฝ๋
}, [state1])
-> state1์ด ๋ณ๊ฒฝ๋ ๋๋ง ์คํ๋๋ค.
โผ๏ธ ์ฐธ๊ณ : ์ฝ๋ฉ์ ํ react ๊ฐ์