๐ ๋ฆฌ์กํธ Hooks
- ๋ฆฌ์กํธ์์ ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ์์ต๋๋ค. ๊ทธ ์ค์ Hooks๋ ํจ์ํ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
- Hooks๋ ๊ธฐ์กด์ ํจ์ํ ์ปดํฌ๋ํธ์์ ํ ์ ์์๋ ์ํ ๊ด๋ฆฌ๋, ๋ ๋๋ง ํ ์์ ์ ์ค์ ํ๋ ๊ธฐ๋ฅ ๋ฑ์ ์์ ์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
- ์ํ(State)๋ ?
- ์ปดํฌ๋ํธ ๋ด๋ถ์ ๋ณ๊ฒฝ๋ ์ ์๋ ๊ฐ props๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ๋๊ฒจ ๋ฐ์ผ๋ฏ๋ก, ์ปดํฌ๋ํธ ์์ ์ props๋ฅผ ๋ฐ๊พธ์ง ๋ชปํ๋ ํน์ฑ์ด ์๋ ๊ฒ๊ณผ๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
useState
ํจ์ํ ์ปดํฌ๋ํธ์์๋ ์ํ(state)๊ด๋ฆฌ๋ฅผ ํ ์ ์๊ฒ ํด ์ฃผ๋ Hook ์
๋๋ค.
์นด์ดํฐ ๊ฐ์ ์ฆ๊ฐ์ํค๊ฑฐ๋ ๊ฐ์์ํค๋ ์นด์ดํฐ๋ฅผ ๊ตฌํํ๋ ์ฝ๋๋ฅผ ์ง ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์์ ์นด์ดํฐ ๊ฐ์ด ๋ ์ํ ๊ฐ์
useState
ํจ์๋ฅผ ์ด์ฉํด ๋ณํ ์ ์๊ฒ ์งค ์ ์์ต๋๋ค.
Step1 ํจ์ํ ์ปดํฌ๋ํธ์์ state๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก useState import ํ๊ณ
import { useState } from "react";
const Counter = () => {
const [value, setValue] = useState(0);
return <div></div>;
};
export default Counter;
- useState ํจ์๋ฅผ ์ด์ฉํ๋ ค๋ฉด import์ {useState}๋ฅผ ํํ ๋ฃ์ด์ผ ํฉ๋๋ค.
- ํจ์ body์
const [value, setValue] = useState(0);
๋ผ๊ณ ์ด ๋ถ๋ถ์ด ์์ต๋๋ค. ์ด๊ฒ์ ์ฒ์ ์ํ๊ฐ (value)์ 0์ผ๋ก ์ด๊ธฐํํ๊ณ , ๊ทธ ์ํ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ setter ํจ์๋ฅผ setValue๋ผ๊ณ ์ง์ ํ ๊ฒ์ ๋๋ค.
step2 return๋ฌธ์ ์ํ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ฒํผ์ ๋ฃ๊ธฐ
import { useState } from "react";
const Counter = () => {
const [value, setValue] = useState(0);
return (
<div>
<p>
ํ์ฌ ์นด์ดํฐ ๊ฐ์ <b>{value} ์
๋๋ค.</b>
</p>
<button onClick={() => setValue(value + 1)}>+1</button>
<button onClick={() => setValue(value - 1)}>-1</button>
</div>
);
};
export default Counter;
- ๋ฒํผ onClick ํจ์๋ฅผ ์ง์ ํ๊ณ , ๊ทธ ํจ์ ๋ด๋ถ์, useState ํจ์๋ฅผ ํ์ฉํ๋ฉด ๋ฉ๋๋ค. ์ง์ ํ๋ setter ํจ์์ธ setValueํจ์๋ฅผ ์ฌ์ฉ ํฉ๋๋ค.
- ์ ์ฒ๋ผ ์์ฑํ ํ์์ ํ์ดํ ํจ์ ๋ฌธ๋ฒ์ ๋๋ค. ์ฆ, ์ฌ์ ์ ํจ์๋ฅผ ๋ฐ๋ก ์ง์ ํ๊ณ ๊ทธ ํจ์ ์ด๋ฆ์ ํธ์ถํ์ง ์๊ณ ๋ ๋จ์ํ๊ฒ ํจ์ body๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ํ์ดํ ํจ์ ๋ฌธ๋ฒ์ () => {โฆbody} ์ ๊ฐ์ ํํ๋ก ์์ฑํ๋๋ฐ, ์์ฒ๋ผ body์ ๋ค์ด๊ฐ ๋ด์ฉ์ด ํ๋ ๋ฟ์ด๋ผ๋ฉด
{, }
๋ฅผ ์๋ตํ ์ ์์ต๋๋ค.
useState๋ฅผ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ๊ธฐ
useState ํจ์๋ ํ๋์ ์ํ ๊ฐ๋ง ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ปดํฌ๋ํธ์์ ๊ด๋ฆฌํด์ผ
const [value, setValue] = useState(0);
ํ ์ํ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด useState๋ฅผ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
const [name, setName] = useState("");
const [nickname, setNickname] = useState("");
const onChangeName = (e) => {
setName(e.target.value);
};
const onChangeNickname = (e) => {
setNickname(e.target.value);
};
- name, nickname ์ด๋ผ๋ ๋ ๊ฐ์ง ์ํ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- input ์์ ๋ฌด์ธ๊ฐ ๊ฐ์ ์
๋ ฅ ๋ฐ์ ๋,
onChange
์ด๋ฒคํธ ํธ๋ค๋ง์ ์ํด onChangeName ๋ฑ๊ณผ ๊ฐ์ ํจ์๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋ ๊ฒ์ ๋๋ค. - ๋ง์ฝ
input
์์์์onChnage
์ด๋ฒคํธ ํธ๋ค๋ง์ ํ์ง ์์ ๊ฒฝ์ฐ, ์ฌ์ฉ์๊ฐinput
๋์ ๋ฌด์์ ์ ๋ ฅํ๋๋ผ๋ ์นธ์๋ ์๋ฌด๊ฒ๋ ๋ณด์ด์ง ์๊ฒ ๋ฉ๋๋ค.
์ด ๊ธ์ ๊น๋ฏผ์ค(velopert)๋์ ๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ์ ์์ฐธ์กฐ ํ์ฌ ์์ฑํ ๊ธ์ ๋๋ค.