state
props
.
.
ํน์ ์ฝ๋๋ค์ด ์ฒซ ๋ฒ์งธ component render์์๋ง ์คํ๋๊ฒ ํ์.
์ฒ์ ํ ๋ฒ๋ง..!!
๋์ค์๋ ์ํ๊ฐ ๋ณํด๋ ์คํ๋์ง ์๋๋ก.
์ฐ๋ฆฌ๊ฐ state๋ฅผ ๋ณ๊ฒฝํ ๋ ๋ชจ๋ code๊ฐ ๋ค์ ์คํ๋๋ค.
ํ์ง๋ง ๊ทธ๋ด ํ์๊ฐ ์์ ๊ฒฝ์ฐ!! ์ด๋ป๊ฒ ํด์ผํ ๊น?
useEffect๋ฅผ ์ฌ์ฉํ๋ค. ์ด useEffect๋ ๋ ๊ฐ์ argument๋ฅผ ๊ฐ์ง๋๋ฐ, ์ฒซ ๋ฒ์งธ๋ ์ฐ๋ฆฌ๊ฐ ๋ฑ ํ ๋ฒ๋ง ์คํํ๊ณ ์ถ์ ์ฝ๋์ด๋ค.
ex) useEffect(function1, [])
๋๋ฒ์งธ๋ ... ๋ง๋ฒ๊ฐ๋ค....?
๊ฒฐ๊ตญ, useEffect์ ๋ํด ๋ฐฐ์ ๋ค. ์ด ํจ์๋ ๊ณ์ ์คํ๋์ง ์๋๋ก ํ๋ ๊ฒ.
ํ ๋ฒ๋ง ์คํํด๋ ๋๋ ๊ฒ๋ค์ ๋ค๋ฃจ๋ ํจ์์ด๋ค.
๋ ๋ฒ์งธ argument๋..
์ด๋ด ๋ ์ฌ์ฉํ๋ค. ํน์ ํ ๋ถ๋ถ์ด ๋ณํ์ ๋๋ง ๋ค์ ์ฐํ๋๋ก ํ๊ณ ์ถ์ ๊ฒฝ์ฐ!
์๋ฅผ ๋ค์ด, ๊ฒ์ ์ฐฝ์์ ๋ฌธ์๋ฅผ ๊ฒ์ํ๊ณ , ๊ฒ์ ์์ด์ฝ์ ๋๋ฅธ๋ค๋ฉด ๊ฐ์ ๋จ์ด๋ฅผ ์ ๋ ฅํ๊ณ ๊ทธ ์ํ์์ ๋ฒํผ์ ์ฌ๋ฌ๋ฒ ํด๋ฆญํ๋ฉด ํด๋ฆญ ํ ๋๋ง๋ค ์ํ๊ฐ ๋ณํ๋ค. ์ฆ, ํ ์คํธ ํ๋๋ ๋ณํ์ง ์์ง๋ง ๋ฒํผ์ ๋๋ ๊ธฐ ๋๋ฌธ์ ๊ณ์ ์ฐ์ด๋ด๋ ๊ฒ์ด๋ค.
๋ฒํผ์ ๋๋ฆ์ผ๋ก์จ counter๊ฐ ๋ณํํ ๋๋ ์ํ๋ฅผ ๊ฒ์ํ๊ณ ์๋ ๊ฒ์ด๋ค.
์ด ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
useEffect(() => {
console.log("SEARCH FOR", keyword); //keyword๊ฐ ๋ณํํ ๋๋ง ์คํ๋๋ค.
}, [keyword]);
์ด๋ ๊ฒ ํ๋ฉด keyword๊ฐ ๋ณํํ ๋ ์ฝ๋๋ฅผ ์คํํ ๊ฑฐ๋ผ๊ณ react.js์๊ฒ ์๋ ค์ฃผ๋ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ๋ ๋ฒ์งธ argument๋ฅผ []๋ก ๋น์๋์ ๋ ํ ๋ฒ๋ง ์คํ๋๋ ์ด์ ๋ ๋น์ด์์ผ๋ฏ๋ก ์ง์ผ๋ณผ ๋ณํ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ, ๋ ๋ฒ์งธ argument๋ฅผ ์ฑ์ฐ๋ฉด, 'ํด๋น argument๊ฐ ๋ณํํ๋์ง ์ง์ผ๋ด์ค' ๋ผ๊ณ ๋งํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๋ณต์ต!!!!
๋ฆฌ์ํธ์์๋ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ฌ ๋๋ง๋ค UI๋ฅผ refresh ํ๋ค๋ ํน์ง์ด ์๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ์ง์ ํ์ง ์์๋ ๋๋ฏ๋ก ํธํ๋ค.
ํ์ง๋ง! ํ ๋ฒ๋ง ์คํํ๊ณ ์ถ์ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ, ํน์ ํ ๋ฒ๋ง ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ! ์ด๋ป๊ฒ ํด์ผํ๋๊ฐ!!
์ด ๋ useEffect๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด ํจ์๋ ๋ ๊ฐ์ argument๋ฅผ ๊ฐ๋๋ฐ,
์ฒซ ๋ฒ์งธ argument๋ ์ฐ๋ฆฌ๊ฐ ์คํ์ํค๊ณ ์ถ์ ์ฝ๋์ด๊ณ ,
๋ ๋ฒ์งธ argument๋ dependencies๋ผ๊ณ ๋ถ๋ฆฐ๋ค. ์ด๋ react.js๊ฐ ์ง์ผ๋ด์ผ ํ๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ด ๋ณํํ ๋ ์ฒซ ๋ฒ์งธ argument๋ฅผ refresh ํ๋ ๊ฒ์ด๋ค.
๋ ๋ฒ์งธ argument๋ array์ด๋ฏ๋ก ์ฌ๋ฌ ๊ฐ์ component๋ฅผ ๋ฃ์ด๋ ๋๋ค.
๊ฒฐ๋ก
useEffect๋ ์ํ๋ state์ด ๋ณํ ๋๋ง ์ํ๋ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค!!
react.js๋ ๋ณํ๊ฐ ์์ ๋๋ง๋ค refresh ํ๋๋ฐ, useEffect๋ฅผ ์ฌ์ฉํด์ ์ํ๋ ๊ฒฝ์ฐ์๋ง refresh ํ ์ ์๋ค.
[ ํ์๋ ์๋์ง๋ง, ์์ฃผ ์ฐ์ด๋ ๊ฒ์ ์๋์ง๋ง ]
Cleanup function
์ด ํจ์๋ ๊ทธ๋ฅ ํจ์์ธ๋ฐ, ์ฐ๋ฆฌ์ component๊ฐ destroy๋ ๋ ๋ญ๊ฐ ํ ์ ์๋๋ก ํด์ฃผ๋ ๊ฒ์ด๋ค.
Cleanup function์ ๋ฐ๋ก ์ด ์ด๋ฆ์ ํจ์๊ฐ ์๋ ๊ฒ์ด ์๋๋ผ useEffect์์ component๊ฐ ์์ด์ง ๋ ๋ฌด์ธ๊ฐ๋ฅผ returnํ๋ ๊ฒ.
์ด๋ component๊ฐ ์์ด์ง ๋ ์ด๋ค ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ด๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฅผ ํตํด ์ธ์ component๊ฐ create ๋๋์ง, ์ธ์ destroy ๋๋์ง ์ ์ ์๋ค.
function Hello() {
function byFn() {
console.log("bye :(");
}
function hiFn() {
console.log("created :)");
return byFn; // React.js๊ฐ hiFn์ ์คํํ๊ณ , hiFn์ด ํ๊ดด๋ ๋ byFn์ ์คํํ๋ค.
}
useEffect(hiFn, []);
return <h1>Hello</h1>;
}
๋ฌผ๋ก ๋ฌธ์ ๊ทธ๋๋ก ์ ์ ์๋ ์๋ค.
function Hello() {
useEffect(() => {
console.log("hi :)");
return () => console.log("bye :(");
}, []);
useEffect(function () {
console.log("hi :)");
return function() {
console.log("bye :(");
};
}, []);
return <h1>Hello</h1>;
}
'๐ฅ๏ธ react' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[react] ThemeProvider ์ฌ์ฉํ๊ธฐ (0) | 2024.01.20 |
---|---|
[react] dropdown ๋ง๋ค๊ธฐ (์์ด์ฝ, ๋๋กญ๋ค์ด) (0) | 2024.01.17 |
[react] react-dropdown ์ปค์คํ ํ๊ธฐ (0) | 2024.01.15 |
[react] markdown editor, viewer ๊ตฌํํ๊ธฐ (2) | 2023.01.29 |
styled components (0) | 2022.12.27 |