๋ฆฌ์กํธ 16.8 ์ด์ ๋ฒ์ : ํจ์ํ ์ปดํฌ๋ํธ์์๋ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์์๋ค.
๋ฆฌ์กํธ 16.8์์ Hooks ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด์ ํจ์ํ ์ปดํฌ๋ํธ์์๋ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ ๋์๋ค.
=> ๋ฆฌ์กํธ Hooks ์ค ํ๋์ธ useState ํจ์๋ก ์ํ ๊ด๋ฆฌ
src
ํด๋์ Counter.js
์์ฑ// 1
import React from "react";
function Counter() {
return (
<div>
<h1>0</h1>
<button>+1</button>
<button>-1</button>
</div>
);
}
export default Couter;
// 2
import React from "react";
function Counter() {
const onIncrease = () => {
console.log("+1");
};
const onDecrease = () => {
console.log("-1");
};
return (
<div>
<h1>0</h1>
<button onClick={onIncrease}>+1</button>
<button onClick={onDecrease}>-1</button>
</div>
);
}
export default Couter;
useState
ํจ์ ์ฌ์ฉuseState
ํจ์๋ฅผ ๋ถ๋ฌ์ ์ฌ์ฉ// 3
import React, { useState } from "react";
function Counter() {
// ์ฒซ ๋ฒ์งธ ์์(number) : ํ์ฌ ์ํ
// ๋ ๋ฒ์งธ ์์(Setter) : Setter ํจ์
// ์ํ์ ๊ธฐ๋ณธ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ ํธ์ถ
const [number, setNumber] = useState(0);
const onIncrease = () => {
setNumber(number + 1);
};
const onDecrease = () => {
setNumber(number - 1);
};
return (
<div>
<h1>{number}</h1>
<button onClick={onIncrease}>+1</button>
<button onClick={onDecrease}>-1</button>
</div>
);
}
export default Couter;
๋ฐฐ์ด ๋น๊ตฌ์กฐํ ํ ๋น
const numberState = useState(0);
const number = numberState[0];
const setNumber = numberState[1];
// ๋ฐฐ์ ๋น๊ตฌ์กฐํ ํ ๋น
const [number, setNumber] = useState(0);
// 4
import React, { useState } from "react";
function Counter() {
const [number, setNumber] = useState(0);
const onIncrease = () => {
setNumber((prevNumber) => prevNumber + 1);
};
const onDecrease = () => {
setNumber((prevNumber) => prevNumber - 1);
};
return (
<div>
<h1>{number}</h1>
<button onClick={onIncrease}>+1</button>
<button onClick={onDecrease}>-1</button>
</div>
);
}
export default Couter;
// App.js
import React from "react";
import Counter from "./Counter";
function App() {
return <Counter />;
}
export default App;
src
ํด๋์ InputSample.js
์์ฑ// InputSample.js
import React from "react";
function InputSample() {
return (
<div>
<input />
<button>์ด๊ธฐํ</button>
<div>
<b>๊ฐ: </b>
</div>
</div>
);
}
export default InputSample;
onChange
์ด๋ฒคํธ ์ฌ์ฉe
๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์์ ์ฌ์ฉe.target
์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ DOM์ธ input DOM์ ๊ฐ๋ฅดํดvalue
๊ฐ, ์ฆ e.target.value
๋ฅผ ์กฐํํ๋ฉด ํ์ฌ input์ ์
๋ ฅํ ๊ฐ์ ์ ์ ์๋ค.// InputSample.js
import React, { useState } from "react";
function InputSample() {
const [text, setText] = useState("");
const onChange = (e) => {
setText(e.target.value);
};
const onReset = () => {
setText("");
};
return (
<div>
<input onChange={onChange} value={text} />
<button onClick={onReset}>์ด๊ธฐํ</button>
<div>
<b>๊ฐ: {text}</b>
</div>
</div>
);
}
export default InputSample;
// App.js
import React from "react";
import InputSample from "./InputSample";
function App() {
return <InputSample />;
}
export default App;
// InputSample.js
import React, { useState } from "react";
function InputSample() {
const onChange = (e) => {};
const onReset = () => {};
return (
<div>
<input placeholder="์ด๋ฆ" />
<input placeholder="๋๋ค์" />
<button onClick={onReset}>์ด๊ธฐํ</button>
<div>
<b>๊ฐ: {text}</b>
์ด๋ฆ (๋๋ค์)
</div>
</div>
);
}
export default InputSample;
useState
๋ฅผ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํ๊ณ , onChange
๋ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ข์ง ์๋ค.name
์ ์ค์ ํ๊ณ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์ด ๊ฐ์ ์ฐธ์กฐuseState
์์ ๋ฌธ์์ด์ด ์๋๋ผ ๊ฐ์ฒด ํํ์ ์ํ๋ฅผ ๊ด๋ฆฌimport React, { useState } from "react";
function InputSample() {
const [inputs, setInputs] = useState({
name: "",
nickname: "",
});
// ๋น๊ตฌ์กฐํ ํ ๋น์ ํตํด ๊ฐ ์ถ์ถ
const { name, nickname } = inputs;
const onChange = (e) => {
// ์ฐ์ e.target์์ name๊ณผ value๋ฅผ ์ถ์ถ
const { value, name } = e.target;
setInputs({
...inputs, // ๊ธฐ์กด์ input ๊ฐ์ฒด ๋ณต์ฌ
[name]: value, // name ํค๋ฅผ ๊ฐ์ง ๊ฐ์ value๋ก ์ค์
});
};
const onReset = () => {
setInputs({
name: "",
nickname: "",
});
};
return (
<div>
<input name="name" placeholder="์ด๋ฆ" onChange={onChange} value={name} />
<input
name="nickname"
placeholder="๋๋ค์"
onChange={onChange}
value={nickname}
/>
<button onClick={onReset}>์ด๊ธฐํ</button>
<div>
<b>๊ฐ: </b>
{name} ({nickname})
</div>
</div>
);
}
export default InputSample;
// ์ง์ ์์
input[name] = value;
// ์๋ก์ด ๊ฐ์ฒด ์์ฑ
setInputs({
...inputs,
[name]: value,
});
์ฐธ๊ณ