[React] ๋น๋๊ธฐ useState ๋๊ธฐ๋ก ์ฒ๋ฆฌํ๊ธฐ
๋ค๋ค ๋ฆฌ์กํธ ํ๋ก์ ํธ์์ useState๋ฅผ ์ฐ๋ฉฐ ๋นํฉํ๋ ์ ์ด ์์๊ฑฐ๋ผ ์๊ฐํ๋ค.
๋ฆฌ์กํธ์ useState๋ฅผ ์ฐ๋ค๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก ๋์ํ์ง ์๋ ๊ฑธ ํ์ธํ ์ ์๋ค.
์๋ ์ฝ๋๋ ์ฒดํฌ๋ฐ์ค๊ฐ ํ๋ ์กด์ฌํ๊ณ ์ฒดํฌํ ๋๋ง๋ค ์ํ toggle ๊ฐ์ด true or false๋ฅผ ๊ฐ์ง๋ ๋ก์ง์ด๋ค.
์ฒดํฌ๋ฐ์ค๋ฅผ ์ฒดํฌํ๋ ๊ฑธ๋ก ์ํ๊ฐ์ ๋ฐ๊พธ๋ ์์๋ฅผ ๋ณด๊ณ ๊ฒฐ๊ณผ๋ฅผ ์์ํด๋ณด์
import React, { useState } from "react";
function App() {
const [toggle, setToggle] = useState(false);
const onChange = () => {
setToggle((toggle) => !toggle);
if(toggle) {
console.log('toggle์ True'); // ๋ฌด์์ด
} else {
console.log('toggle์ False'); // ๋์ฌ๊น์
}
};
return (
<>
<input type="checkbox" onChange={onChange} />
</>
);
}
์ฐ๋ฆฌ๋ ๋น์ฐํ๊ฒ๋ ํจ์ ๋ด๋ถ์ setToggle๋ก ์ธํด toggle ์ํ๊ฐ์ด true๋ก ๋ณ๊ฒฝ๋๊ณ , ๋ฐ์ if๋ฌธ์์ toggle์ True๊ฐ ์ถ๋ ฅ๋ ๊ฑฐ๋ผ ์๊ฐํ๋ค.
๊ทธ๋ฌ๋ ํ๋ฌดํ๊ฒ๋ ๋ฆฌ์กํธ๋ ์ฐ๋ฆฌ ์์๊ณผ ๋ค๋ฅด๊ฒ toggle์ false๊ฐ ์ถ๋ ฅ๋๋ ๊ฑธ ํ์ธํ ์ ์๋ค.(๋น๋๊ธฐ....๐)
๊ทธ๋ฌ๋ ๋ฆฌ์กํธ๋ ์ฐ๋ฆฌ์๊ฒ useEffect๋ผ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ง์ํด์ค๋ค!!
useEffect ์ฌ์ฉ
import React, { useState, useEffect } from "react";
function App() {
const [toggle, setToggle] = useState(false);
useEffect(() => {
if(toggle) {
console.log('toggle์ True');
} else {
console.log('toggle์ False');
}
}, [toggle])
const onChange = () => {
setToggle((toggle) => !toggle);
};
return (
<>
<input type="checkbox" onChange={onChange} />
</>
);
}
useEffect๋ฅผ ์ ์ธํด toggle์ด ๋ฐ๋๋๋ง๋ค ํด๋น ๋ก์ง์ด ๋์๊ฐ๋๋ก ๊ตฌ์ฑํ๋ฉด ๋๊ฐ๋ด๋ ๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฑธ ์ ์ ์๋ค.
setState๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ธฐ๋ณด๋ค(์ฝ๋๊ฐ ์์ฃผ ๋๋ฌ์์ง ๊ฒ์ด๋ค), hook์์ ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํด
๋๊ธฐ์ ์ด๊ธธ ์ํ๋ ๋ก์ง์ ๊ตฌ์ฑํด๋ณด์!
์ด๋ค ์ค๋ฅ๊ฐ ์์ผ๋ฉด ๊ทธ ๋ถ๋ถ์์ ํด๊ฒฐ์ฑ ์ ๊ณ ๋ฏผํ ๊ฒ ์๋๋ผ ๋๊ฒ ๊ณ ๋ฏผํ๋ ์์ธ๋ฅผ ๊ฐ์ ธ์ผ ํ ๊ฒ ๊ฐ๋ค.
useEffect๋ ์์ฃผ ๊ฐ๋ ฅํ ๋๊ตฌ์ด๋ฏ๋ก ๊ณต์ ๋ฌธ์๋ฅผ ํตํด ์๋ฒฝํ๊ฒ ์ตํ๋ ๊ฑธ ์ถ์ฒํ๋ค.
https://ko.reactjs.org/docs/hooks-effect.html