ํ ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ ์น์ 6 - React.js ์ ๋ฌธ
npm create vite@latest
Project name:
Select a framework: React
npm install
npm run dev
import reactLogo from './assets/react.svg'
import voteLogo from '/vite.svg'
src์ App.jsx์์ ์ญ์
src App.css ๊ธฐ๋ณธ ์คํ์ผ ๊ฐ ๋ชจ๋ ์ญ์ ํ๊ธฐ
์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ ์ ์ผ๋ก ๊ฒ์ฌํด์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋งํ ์ฝ๋๊ฐ ์์ผ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋์์ฃผ๋ ํ๋ก๊ทธ๋จ


ํ์ผ์ ๋ค์ด๊ฐ๋ณด๋ฉด enslint ํ์ผ์ด ์๊ฒผ์์ ํ์ธํ ์ ์๋ค.
์ปดํฌ๋ํธ: html์ ๋ฐํํ๋ ํจ์
์ฃผ์์ : ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ํจ์์ ์ด๋ฆ์ ๋ฐ๋์ ์ฒซ ๊ธ์๊ฐ ๋๋ฌธ์๊ฐ ๋์ด์ผ ํ๋ค.
const Header = () => {
return(
<header>
<h1>header</h1> // ์์ ์ปดํฌ๋ํธ
<header>
};
};
fucntion App() {
return (
<>
<Header /> // Header ์ถ๋ ฅ ์ฝ๋
<h1> ์๋
๋ฆฌ์กํธ!!</h1> // ๋ถ๋ชจ ์ปดํฌ๋ํธ
</>
};
}
์์ ์์ App ์ปดํฌ๋ํธ๋ root component์ด๋ค!
const Header = () => {
return(
<header>
<h1>header</h1> // ์์ ์ปดํฌ๋ํธ
<header>
};
};
export default Header; //์ถ๊ฐํ๊ธฐ
Header.jsxํ์ผ์ ๋ง๋ค์ด์
import "./App.css";
import Header from "./components/Header.jsx"; //์ถ๊ฐํ๊ธฐ(.jsx๋ ์๋ต ๊ฐ๋ฅ)
fucntion App() {
return (
<>
<Header />
<h1> ์๋
๋ฆฌ์กํธ!!</h1> // ๋ถ๋ชจ ์ปดํฌ๋ํธ
</>
};
}
export default App;
App.jsxํ์ผ์์ import๋ฅผ ํ๋ ๋ฐฉ๋ฒ๋ ๊ฐ๋ฅํ๋ค.
const Main = () => {
const number = 10;
return(
<main>
<h1>main</h1>
<h2>{number}</h2> //{} ์ค๊ดํธ ์์ ์ถ๋ ฅํ๊ณ ์ถ์๊ฑฐ ์์ฑ
</main>
};
};
jsx ๋ฌธ๋ฒ์์ javascript ๊ฐ์ html์ ๋๋๋ง ํ๊ณ ์ถ๋ค๋ฉด {} ์ค๊ดํธ ์์ ์ถ๋ ฅํ๊ณ ์ถ์๊ฑฐ ์์ฑ
์ผํญ์ฐ์ฐ์(number % 2 ===0 ? "์ง์" : "ํ์")๋ {}์์ ๋ฃ์ด์ ์ถ๋ ฅ ๊ฐ๋ฅํ๋ค.
์ค๊ดํธ ๋ด๋ถ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์๋ง ๋ฃ์ ์ ์๋ค.
์ซ์ & ๋ฌธ์์ด & ๋ฐฐ์ด๋ง ๋ ๋๋ง ๊ฐ๋ฅํ๋ค.
๊ฐ์ฒด ๋๋๋ง ๋ถ๊ฐ๋ฅํ๋ค.
๋ชจ๋ ํ๊ทธ๋ ๋ซํ์์ด์ผ ํ๋ค.
<img>
</img>
const Main = () =>{
const user = {
name:"๊น์์ง"
isLogin: false,
};
return {
<>
{user.isLogin ? {
<div>๋ก๊ทธ์์</div>
} : {
<div>๋ก๊ทธ์ธ</div>
}}
</>;
};
};
const Main = () =>{
const user = {
name:"๊น์์ง"
isLogin: false,
};
if (user.isLogin) {
return <div>๋ก๊ทธ์์</div>;
} else {
return <div>๋ก๊ทธ์ธ</div>;
}
์นด๋ฉ์ผ์ด์ค: ์ฐ๊ฒฐ๋๋ ์ฒซ๋ฒ์งธ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ํ๊ธฐํ๋ ๋ฐฉ๋ฒ
backgroundColor:"red"
๋ฐ๋ก ํ์ผ์ ๋ง๋ค ๊ฒฝ์ฐ
.logout{
background-color: red;
.
.
.
}
main.cssํ์ผ์main.jsx์์ `import "./Main.css";๋ฅผ ํ ํ, div์์์ผ๋ก ๋ถ๋ฌ์์ฃผ๋ฉด ์ ์ฉ์ด ๋๋ค.
props๋?
์ปดํฌ๋ํธ์ ์ ๋ฌ๋ ๊ฐ
<Button text={"๋ฉ์ผ"} img={"mail.png"} /> //text={"๋ฉ์ผ"} img={"mail.png"} ์ด ๋ถ๋ถ์ด props๋ค.
import Button from "./components/Button";
function App() {
return (
<>
<Button text={"๋ฉ์ผ"}/>
<Button text={"์นดํ"}/>
<Button text={"๋ธ๋ก๊ทธ"}/>
</>
);
}
App.jsx์์Button ์ปดํฌ๋ํธ๋ฅผ import ํด์ค๋ค.
const Button = (props)=> {
console.log(props);
return <button>ํด๋ฆญ</button>
};
Button.jsx์ props๋ฅผ ์์ฑํด์ฃผ๋ฉด ์ถ๋ ฅ์ด ๊ฐ๋ฅํ๋ค.
props์ ๊ตฌ์กฐ๋ถํดํ ๋น ๋ฐฉ๋ฒ์ ์ด์ฉํด์ค์ผํ๋ค.
const Button = ({ text, color = "black"}) => {
return {
<button style = {{color: color}}>
{text}-{color.toUpperCase()}
</button>
};
};
import Button from "./components/Button";
function App() {
const buttonProps = {
text :"๋ฉ์ผ",
color: "red",
a: 1,
b: 2,
c: 3,
};
return (
<>
<Button {...buttonProps}/> //์ค์
<Button text={"์นดํ"}/>
<Button text={"๋ธ๋ก๊ทธ"}/>
</>
);
}
์์ฑ์ด ๋ง์ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ก ์ฎ๊ธฐ๋ฉด ํธ๋ฆฌํ๋ค.
html react ์ปดํฌ๋ํธ๋ ์ ๋ฌ ๊ฐ๋ฅํ๋ค.
return (
<>
<Button {...buttonProps}/>
<Button text={"์นดํ"}/>
<Button text={"๋ธ๋ก๊ทธ"}/>
<div>์์์์ </div>
</Button>
</>
);
}
App.jsxํ์ผ์ divํ๊ทธ๋ฅผ ๋ฐฐ์น์ํค๋ค.
const Button = ({children, text, color = "black"}) => {
return {
<button style = {{color: color}}>
{text}-{color.toUpperCase()}
{children}
</button>
};
};
Button.jsx์์ children ์์ฑํ๊ธฐ
Event Handling: ์น ๋ด๋ถ์์ ๋ฐ์ํ๋ ์ฌ์ฉ์์ ํ๋์ ์ฒ๋ฆฌํ๋ ๊ฒ
const Button = ({children, text, color = "black"}) => {
const onClickButton = () => {
console.log(text);
};
return {
<button
onClick = {onClickButton}
style = {{color: color}}
>
{text}-{color.toUpperCase()}
{children}
</button>
};
};
๋ฒํผ์ ๋๋ฅด๋ฉด ์ด๋ ํ ์ฌ๊ฑด์ด ๋ฐ์๋๋๋ก ์คํ์์ผ์ฃผ๋ ์ฝ๋์ด๋ค.
๋ชจ๋ ์น ๋ธ๋ผ์ฐ์ ์ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ํ๋๋ก ํต์ผํ ํํ
const Button = ({children, text, color = "black"}) => {
const onClickButton = (e) => {
console.log(e); //SyntheticBaseEvent ๋ชจ๋ ์ ๋ณด๊ฐ ๋ด๊ฒจ์ ธ ์๋ค.
console.log(text);
};
return {
<button
onClick = {onClickButton}
style = {{color: color}}
>
{text}-{color.toUpperCase()}
{children}
</button>
};
};
State ๋?
ํ์ฌ ๊ฐ์ง๊ณ ์๋ ํํ๋ ๋ชจ์์ ๋ปํ๋ค.
๋ณํํ ์ ์๋ ๋์ ์ธ ๊ฐ์ด๋ค.
import "./App.css";
import {useState} from "react";
function App() {
const [state, setState] = useState(0); //state๊ฐ, setState: state๋ฅผ ๋ณํ์ํค๋
return
<>
<h1>{state}</h1>
</>;
};
}
Re-Render / Re-Rendering: state๊ฐ ๋ฐ๋๋ฉด์ ์ปดํผ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง ๋๋ ์ํฉ
import "./App.css";
import {useState} from "react";
function App() {
const [state, setState] = useState(0);
return //state๊ฐ return๋ฌธ์ ํตํด ๋ฆฌ๋ ๋๋ง ๋จ
<>
<h1>{state}</h1>
<button
onCLick ={() => {
setState(state + 1);
}}
>
+
</button>
</>;
};
}
state๊ฐ return๋ฌธ์ ํตํด ๋ฆฌ๋ ๋๋ง ๋๋ค.
import "./App.css";
import {useState} from "react";
function App() {
const [state, setCount] = useState(0);
const [light, setLight] = useState("OFF");
return {
<>
<div>
<h1>{light}</h1>
<button
onClick={() => {
setLight(light === "ON" ? "OFF" : "ON");
}}
>
{{light === "ON" ? "๋๊ธฐ" : "์ผ๊ธฐ"}
</button>
</div>
<div>
<h1>{count}</h1>
<button
onCLick = {() => {
setCount(count + 1);
}}
>
+
</button>
</>;
};
}
state๋ฅผ props๋ฅผ ์ด์ฉํด์ ์์ ์ปดํฌ๋ํธ์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ
์์ ์ปดํฌ๋ํธ๋ ๋ถ๋ชจ๋ก๋ถํฐ ๋ฐ๋ props์ ๊ฐ์ด ๋ฐ๋๋ฉด ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ๋ค.
react ์ปดํฌ๋ํธ๋ ์์ ์ด ๊ฐ๊ณ ์๋ state๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ ๋ถ๋ชจ๋ก๋ถํฐ ๋ฐ๋ props ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด re-rendering์ด ๋๋ค.
react ์ปดํฌ๋ํธ๊ฐ re-rendering ๋๋ ์ํฉ
1. ์์์ด ๊ด๋ฆฌํ๋ state์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋์ด๋ค.
2. ์์์ด ์ ๊ณต๋ฐ๋ props์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋์ด๋ค.
3. ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ re-rendering์ด ๋๋ฉด ์์ ์ปดํฌ๋ํธ๋ re-rendering ๋๋ค.
์์ ์ปดํฌ๋ํธ๊ฐ ๋ง์์ง๋ฉด ๊ด๋ฆฌ๊ฐ ์ด๋ ต๊ณ ์ฑ๋ฅ์ด ์ ํ๋๋ค.
=> ๋ฐ๋ผ์ ๊ด๋ จ ์๋ ๋๊ฐ์ state๋ฅผ ํ๋์ ์ปดํฌ๋ํธ ๋ชฐ์๋ฃ๊ธฐ๋ณด๋ค ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
function App(){
const [count, setCount] = useState(0);
const [light, setLight] = useState("OFF");
์์ ์ปดํฌ๋ํธ๊ฐ ๋ง์์ง๋ฉด ์ด์ํ ์ฝ๋๊ฐ re-rendering ๋ ์๋ ์๋ค.
const Counter ()=>{
const [count, setCount] = useState(0);
return ๋ฌธ
.
.
.
}
const Bulb = () => {
const [light, setLight] = useState("OFF");
return ๋ฌธ
.
.
.
๋ค๋ฅธ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ ์ฝ๋์ด๋ค.
๊ฐ๋จํ ํ์๊ฐ์
ํผ
1. ์ด๋ฆ
2. ์๋
์์ผ
3. ๊ตญ์
4. ์๊ธฐ์๊ฐ
const Register = () => {
const [name, setName] = useState("์ด๋ฆ");
const [birth, setBirth] = useState("");
const [country, setCountry] = useState("");
const [bio, setBio] = useState("");
const onChangeName = (e) => {
setName(e.target.value);
};
const onChangeBirth = (e) => {
setBirth(e.target.value);
};
const onChangeCountry = (e) => {
setCountry(e.target.value);
};
const onChangeBio = (e) => {
setBio(e.target.value);
};
return {
<div>
<input
value={name} // ์ด๋ฆ ๊ด๋ฆฌํ๊ธฐ
onChange={onChangeName}
placeholder={"์ด๋ฆ"}
/>
</div>
<div>
<input
value={input.birth} // ์์ผ ๊ด๋ฆฌํ๊ธฐ
onChange={onChangeBirth}
type: "date"
<div>
<select value = {country} onChange={onChangeCountry}> //๊ตญ์
<option></option>
<option>ํ๊ตญ</option>
<option>๋ฏธ๊ตญ</option>
<option>์๊ตญ</option>
</select>
{country}
</div>
<div>
<textarea value={bio} onChange={onChangeBio} />
{bio}
</div>
</div>
);
};
const Register = () => {
const [input, setInput] = useState({
name = "",
birth = "",
country = "",
bio = "",
const onChangeName = (e) => {
setInput({
...input,
name : e.target.value
})
};
const onChangeBirth = (e) => {
setInput({
...input,
birth : e.target.value
})
};
const onChangeCountry = (e) => {
setInput({
...input,
country : e.target.value
})
};
const onChangeBio = (e) => {
setInput({
...input,
bio: e.target.value
})
};
return (
<div>
<input
value={input.name} // ์ด๋ฆ ๊ด๋ฆฌํ๊ธฐ
onChange={onChangeName}
placeholder = {"์ด๋ฆ"}
/>
</div>
<div>
<input
value={input.birth} // ์์ผ ๊ด๋ฆฌํ๊ธฐ
onChange={onChangeBirth}
placeholder = {"์์ผ"}
/>
</div>
<div>
<select value = {input.country} onChange={onChangeCountry}> //๊ตญ์
<option></option>
<option>ํ๊ตญ</option>
<option>๋ฏธ๊ตญ</option>
<option>์๊ตญ</option>
</select>
{country}
</div>
<div>
<textarea value={input.bio} onChange={onChangeBio} />
{bio}
</div>
</div>
);
};
...input spread์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ?
๊ด๋ จ์๋ ํ๋กํผํฐ๊ฐ์ ์ ์ง์ํค๊ธฐ ์ํด
ํ๋์ ํ๋กํผํฐ๊ฐ๋ง ๋ฐ๋๊ฒ ํ ์ ์๋ค๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
const Register = () => {
const [input, setInput] = useState({
name = "",
birth = "",
country = "",
bio = "",
const onChangeName = (e) => {
setInput({
...input,
[e.target.name] : e.target.value
});
};
return (
<div>
<input
value={input.name}
onChange={onChange} //๋ฐ๋๋ถ๋ถ!
placeholder = {"์ด๋ฆ"}
/>
</div>
<div>
<input
value={input.birth}
onChange={onChange} //๋ฐ๋๋ถ๋ถ!
type: "date"
/>
</div>
<div>
<select value = {input.country} onChange={onChange}> //๋ฐ๋๋ถ๋ถ!
<option></option>
<option>ํ๊ตญ</option>
<option>๋ฏธ๊ตญ</option>
<option>์๊ตญ</option>
</select>
{country}
</div>
<div>
<textarea value={input.bio} onChange={onChange} /> //๋ฐ๋๋ถ๋ถ!
{bio}
</div>
</div>
);
};
input, select ๋ฑ ๋ชจ๋ trxtarea์ onChange๋ผ๋ ํตํฉ์ด๋ฒคํธ๋ฅผ ์ค์นํด๋์๋ค.
useRef๋? ์๋ก์ด Reference ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ด๋ค.
const refObject = useRef()
refObject ๋ ์ปดํฌ๋ํธ ๋ด๋ถ์ ๋ณ์์ด๋ค.
useRef :
reference ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
์ปดํฌ๋ํธ ๋ด๋ถ์ ๋ณ์๋ก ํ์ฉ ๊ฐ๋ฅํ๋ค.
์ด๋ค ๊ฒฝ์ฐ์๋ ๋ฆฌ๋ ๋๋ง์ ์ ๋ฐํ์ง ์๋๋ค.
useState:
State๋ฅผ ์์ฑํ๋ค.
์ปดํฌ๋ํธ ๋ด๋ถ์ ๋ณ์๋ก ํ์ฉ ๊ฐ๋ฅํ๋ค.
๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋ ๋๋งํ๋ค.
import {useState, useRef} from "react";
const Register = () => {
const [input, setInput] = useState({
name = "",
birth = "",
country = "",
bio = "",
const refObj = useRef(); // ์๋ก์ด ๋ ํผ๋ฐ์ค ๊ฐ์ฒด ์์ฑ
console.log("Register ๋ ๋๋ง"); // ๋ฆฌ๋ ๋๋งํ์ง ์๋๋ค.
const onChangeName = (e) => {
setInput({
...input,
[e.target.name] : e.target.value
});
};
return (
<div>
<button
onCLick = {() => {
refObj.current++;
console.log(refObj.current());
}}
>
ref +1
</button>
<div>
<input
value={input.name}
onChange={onChange}
placeholder = {"์ด๋ฆ"}
/>
</div>
<div>
<input
value={input.birth}
onChange={onChange}
type: "date"
/>
</div>
<div>
<select value = {input.country} onChange={onChange}>
<option></option>
<option>ํ๊ตญ</option>
<option>๋ฏธ๊ตญ</option>
<option>์๊ตญ</option>
</select>
{country}
</div>
<div>
<textarea value={input.bio} onChange={onChange} />
{bio}
</div>
</div>
);
};
useRef๋ ๋ฆฌ๋ ๋๋งํ์ง ์๋๋ค.
import {useState, useRef} from "react";
const Register = () => {
const [input, setInput] = useState({
name = "",
birth = "",
country = "",
bio = "",
const countRef = useRef();
console.log("Register ๋ ๋๋ง");
const onChangeName = (e) => {
countRef.current ++;
console.log(countRef.current);
setInput({
...input,
[e.target.name] : e.target.value
});
};
return (
<div>
<div>
<input
value={input.name}
onChange={onChange}
placeholder = {"์ด๋ฆ"}
/>
</div>
<div>
<input
value={input.birth}
onChange={onChange}
type: "date"
/>
</div>
<div>
<select value = {input.country} onChange={onChange}>
<option></option>
<option>ํ๊ตญ</option>
<option>๋ฏธ๊ตญ</option>
<option>์๊ตญ</option>
</select>
{country}
</div>
<div>
<textarea value={input.bio} onChange={onChange} />
{bio}
</div>
</div>
);
};
์์ ํ ๋๋ง๋ค count๊ฐ์ 1 ์ฆ๊ฐ์ํจ๋ค.
import {useState, useRef} from "react";
const Register = () => {
const [input, setInput] = useState({
name = "",
birth = "",
country = "",
bio = "",
const countRef = useRef(0);
const inputRef = useRef(); //๋ ํผ๋ฐ์ค ๊ฐ์ฒด ์์ฑ
const onChangeName = (e) => {
countRef.current ++;
console.log(countRef.current);
setInput({
...input,
[e.target.name] : e.target.value
});
};
const onSubmit = () => {
if(input.name=== ""){
// ์ด๋ฆ์ ์
๋ ฅํ๋ DOM ์์ ํฌ์ปค์ค
inputRef.current.focus();
}
};
return (
<div>
<div>
<input
ref = {inputRef} //๋ ๋๋งํ๊ฒ ๋๋ฉด inputRef ๋ ํผ๋ฐ์ค object์ ์ ์ฅ์ด ๋๋ค.
value={input.name}
onChange={onChange}
placeholder = {"์ด๋ฆ"}
/>
</div>
<div>
<input
value={input.birth}
onChange={onChange}
type: "date"
/>
</div>
<div>
<select value = {input.country} onChange={onChange}>
<option></option>
<option>ํ๊ตญ</option>
<option>๋ฏธ๊ตญ</option>
<option>์๊ตญ</option>
</select>
{country}
</div>
<div>
<textarea value={input.bio} onChange={onChange} />
{bio}
</div>
</div>
);
};
์ด๋ฆ์ ์ ๋ ฅํ๋ DOM์์์ focus๋ฅผ ๋ง์ถ๊ธฐ ์ํด์๋ ์ ๋ ฅํ๋ DOM ์์์ธ input ํ๊ทธ์ ์ ๊ทผํด์ผํ๋ค. ๋ฐ๋ผ์
inputRef๋ ํผ๋ฐ์ค ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ค๋ค.
useRef ๋์ let count =0; ๋ก ์์ฑํด๋ ๋ฆฌ๋ ๋๋ง์ด ์ ๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ useRef๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋?
let count = 0;์ ์ง์ญ์ ์์ฑํ๊ณ ๋ฆฌ๋ ๋๋งํ๋ฉด ์ด๊ธฐํ๋๋ค.
let count = 0;์ ์ ์ญ์ ์์ฑํ๊ณ ๋ฆฌ๋ ๋๋งํ๋ฉด useRef์ ๋์ผํ๊ฒ ์ํ๋์ง๋ง, ๋ ์ง์คํฐ ์ปดํผ๋ํธ๊ฐ ๋๊ฐ์ผ๊ฒฝ์ฐ ๋๊ฐ์ ๋ ์ง์คํฐ์ ๋ณ์๋ค์ ํ๋๋ก ์ทจ๊ธํ์ฌ ๋ ๋๋ง ํ์๋ฅผ ์ผ๋ค.useRef`๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋๋ค๊ณ ํด๋ ๋ค์ ๋ฆฌ์ ๋์ง ์๋๋ค.
React Hooks๋? ํด๋ซ ์ปดํฌ๋ํธ์ ๊ธฐ๋ฅ์ ํจ์ ์ปดํฌ๋ํธ์์๋ ์ด์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ฉ์๋์ด๋ค. Function์ปดํฌ๋ํธ์์๋ Class์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
ํน์ง
์ด๋ฆ ์์ ๋์ผํ ์ ๋์ฌ use๊ฐ ๋ถ๋๋ค.
์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์์๋ ํธ์ถ์ด ๋ถ๊ฐํ๋ค.
๋๋ง์ ์ปค์คํ
Hook๋ ๋ง๋ค ์๋ ์๋ค.
import {useState} from "react";
const HookExam = {}> {
const state = useState(); // ์ด๋ฐ์์ผ๋ก ๋ด๋ถํธ์ถ
return <div>hookexam</div>
};
export default HookExam;
if(true) {
const~
};
๋ถ๊ฐ๋ฅ! ์๋ก ๋ค๋ฅธ hook ํผ๋์ด ์๊ฒจ ์ค๋ฅ ๋ฐ์ํ ์๋ ์๋ค.