๐ useState
state๋ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ์๋ฏธํ๋ค.
useState๋ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ๊ฐํธํ๊ฒ ์์ฑํ๊ณ ์ ๋ฐ์ดํธ ์์ผ์ฃผ๋๋ก ์ฌ์ฉํ๋ค.
๊ธฐ๋ณธ์ ์ธ ํํ๋ ์๋์ ๊ฐ๋ค.
const[state, setState] = useState(์ด๊ธฐ๊ฐ);
์ด๊ธฐ๊ฐ์ ์ธ์๋ก ๋ฃ์ผ๋ฉด state์ setState๋ผ๋ ๋ ๊ฐ์ง ์์๋ฅผ ๋ฐฐ์ด ํํ๋ก ๋ฆฌํดํด์ค๋ค.
์ฐ๋ฆฌ์ ํ์ฌ ์ํ๊ฐ์ด state๋ผ๋ ๋ณ์์ ๋ค์ด๊ฐ๊ฒ ๋๋๋ฐ ์ด๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด setState๋ฅผ ์ด์ฉํด์ ๋ณ๊ฒฝํ ์ ์๋ค.
๋ด๋ถ์ ๋ณ์ ์ด๋ฆ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
๐ useState ์ฌ์ฉํด๋ณด๊ธฐ
์ฐ๋ฆฌ๋ ๊ฐ๋ฐ์ ์งํํ๋ฉด์ ๋ฉ๋ด์ ์ ํํ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋๋ก ํ๋ state ๋ฅผ ์ค์ ํ๋๋ก ํด๋ณด์.
const [selected, setSelected] = useState('๋ฉ์ธ');
์์ ๊ฐ์ด ๋ฐฐ์ด์ ์ ์ธํ๋๋ก ํ๋ค.
์ด์ ํ๋์ฝ๋ฉ์ด ์๋๋ผ selected๋ผ๋ state์์ ๋ค์ด์๋ ์ด๊ธฐ๊ฐ '๋ฉ์ธ'์ด ๋ค์ด๊ฐ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
์ด์ ํด๋ฆญ์ ํ์ ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋๋ก ํ๊ธฐ ์ํด onClick ํจ์๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.
๋ฒํผ๊ณผ Span์ ์ด์ฉํด์ ๊ฐ๋จํ๊ฒ state๋ฅผ ๋ณ๊ฒฝํด๋ณด๋๋ก ํ์.
๋ฒํผ์ ๋๋ฅผ๋ ์ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ์ ์ ์๋ค.
์ ์ฒด ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
import { LOGO } from 'assets/images';
import { Image } from 'components/img';
import styled from 'styled-components';
import { useEffect, useState } from 'react';
const HeaderDiv = styled.div`
width: 100%;
box-sizing: border-box;
padding: 20px 80px 0;
`;
const Header = () => {
const [selected, setSelected] = useState('๋ฉ์ธ');
return (
<HeaderDiv>
<Image src={LOGO} alt="LOLPAGO" />
<button onClick={() => setSelected('๋ฉ์ธ')}>๋ฉ์ธ</button>
<button onClick={() => setSelected('๊ฒฐ์ ')}>๊ฒฐ์ </button>
<span>{selected}</span>
</HeaderDiv>
);
};
export default Header;
๋ฆฌ์กํธ ์ ๋ฆฌ๋ ๋กคํ๊ณ ์ ํจ๊ป ์งํ๋๊ธฐ ๋๋ฌธ์ ์์๋๋ก ๋ณด๋ฉด ๋์์ด ๋๋ค.
https://2t-hong.tistory.com/173
์๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ข๊ฒ ๋ค.
useState๋ฅผ ์ด์ฉํ์ฌ ์ํ๋ฅผ ์ฝ๊ฒ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์๋ค.
ํด๋น ๋ด์ฉ์ ๋ณ์ฝ๋ฉ๋์ ReactHooks์ ์ทจํ๋ค๋ฅผ ์ฐธ๊ณ ํ์ต๋๋ค.
https://www.youtube.com/playlist?list=PLZ5oZ2KmQEYjwhSxjB_74PoU6pmFzgVMO
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] mapํจ์ ์ฌ์ฉ๋ฒ (0) | 2024.02.27 |
---|---|
[React] ๋ฆฌ์กํธ ํ ์ค(3) - useLocation, useNaviation (0) | 2024.02.26 |
[React] PNGํ์ผ์ SVGํ์ผ๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ (1) | 2024.02.21 |
[React] ํ๋ฉด์ด ์คํ๋๋ ๋ฐฉ๋ฒ์ ์ดํด (1) | 2024.02.21 |