๐ก State๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ฐ๋ ์ ์๋ ๊ฐ์ ์๋ฏธํฉ๋๋ค.(์ฝ๊ฒ ๋งํ์๋ฉด State๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์ ์ UI๋ฅผ ๋ฐ๊พธ๊ธฐ ์ํด์์ด๋ค.)
๐ก State๋ฅผ ๋ง๋ค ๋๋ useState()๋ฅผ ์ฌ์ฉํ๋ค.
const [ value, setValue ] = useState( ์ด๊ธฐ๊ฐ )
๋จผ์ const ๋ก ์ ์ธ์ ํ๊ณ [ ] ๋น ๋ฐฐ์ด ์ ์์ฑํ๊ณ , ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์๋ฆฌ์๋ ์ด state์ ์ด๋ฆ, ๊ทธ๋ฆฌ๊ณ ๋๋ฒ์งธ ์๋ฆฌ์๋ set ์ ๋ถ์ด๊ณ state์ ์ด๋ฆ์ ๋ถ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ useState( ) ์ ์ธ์์๋ ์ด state์ ์ํ๋ ์ฒ์๊ฐ ์ ๋ฃ์ด์ค๋๋ค.
๐ก state๋ฅผ ๋ณ๊ฒฝํ ๋๋ `setValue(๋ฐ๊พธ๊ณ ์ถ์ ๊ฐ)` ๋ฅผ ์ฌ์ฉํ๋ค.
state๋ ์ปดํฌ๋ํธ์์์ ๋ณํ ์ ์๋ ๊ฐ ์ ๋๋ค.
button์์๋ ๋ณดํต ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ state๋ก ๊ด๋ฆฌํ๋ ํจํด
// src/App.js
import React from "react";
function App() {
return (
<div>
<button>๋ฒํผ</button>
</div>
);
}
export default App;
์ด ๋ฒํผ์ ๋๋ ์ ๋ ํ๊ณ ์ถ์ ํ๋์ ํจ์๋ก ๋ง๋ค ์ ์์ต๋๋ค.
์๋ ์ฝ๋์ ๊ฐ์ด onClickHandler ๋ผ๋ ํจ์๋ฅผ ๋ง๋ค๊ณ onClick={} ์ ๋ฃ์ด์ฃผ์์ต๋๋ค.
React์์๋ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ํจ์์ ์ปดํฌ๋ํธ(button ํ๊ทธ)๋ฅผ ์ฐ๊ฒฐ์ํต๋๋ค.
์ด ํจ์๋ฅผ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ผ๊ณ ํํํฉ๋๋ค.
ํจ์์ console.log("hello button"); ๋ผ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ฒํผ์ ๋๋ฅธ ํ ์ฝ์์ ๋ด ์๋ค.
๋ง๋ ํจ์๋ก ์ธํด ๋ฒํผ์ ๋๋ฅผ ๋ ๋ง๋ค ์ฝ์์ hello button ์ด ์ฐํ๋ ๊ฒ์ด ๋ณด์ ๋๋ค.
import React from "react";
function App() {
// ๋ฒํผ์ ๋๋ ์ ๋ ํ๊ณ ์ถ์ ํ๋
function onClickHandler() {
console.log("hello button");
}
return (
<div>
<button onClick={onClickHandler}>๋ฒํผ</button>
</div>
);
}
export default App;
์ฐ์ state๋ฅผ ํ๋ ๋ง๋ญ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ฒํผ์ ํด๋ฆญ์ ํ์ ๋ state ๊ฐ์ ๋ฐ๊ฟ๋ณด๊ฒ ์ต๋๋ค.
์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ ๊ทธ ์์ setName ์ ๋ฃ์ด์ค๋๋ค.
์ด์ ๋ฒํผ์ ๋๋ฅด๋ฉด setName()์์ ์๋ ๊ฐ์ด โ๋๋นต์ดโ๋๊น, state๊ฐ โ์ด๋จธ์ด๋จธ"์์ โ๋๋นต์ดโ๋ก ๋ฐ๋์์ต๋๋ค!
import React, { useState } from "react";
function App() {
const [name, setName] = useState("์ด๋จธ์ด๋จธ");
function onClickHandler() {
setName("๋๋นต์ด");
}
return (
<div>
{name}
<button onClick={onClickHandler}>๋ฒํผ</button>
</div>
);
}
export default App;
input์์๋ ๋ณดํต ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ state๋ก ๊ด๋ฆฌํ๋ ํจํด
import React, { useState } from "react";
const App = () => {
const [value, setValue] = useState("");
return (
<div>
<input type="text" />
</div>
);
};
export default App;
input๊ณผ useState๋ฅผ ์ฌ์ฉํด์ input์ ๊ฐ์ ๋ฃ์ value๋ผ๋ state๋ฅผ ์์ฑํ์ต๋๋ค.
์ด๋ฒ์๋ function keyword๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
๐ก ํ์ดํ ํจ์, function ํค์๋ ๋ชจ๋ ๋๊ฐ์ด ํจ์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
input๊ณผ ์์ฑํ state(value)๋ฅผ ์ฐ๊ฒฐํด๋ณผ๊ฒ์.
๋จผ์ input์ onChange๋ผ๋ ์ด๋ฒคํธ๋ฅผ ๋ถ๋ฌ๋ด๊ณ , ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ๋ฃ์ต๋๋ค.
import React, { useState } from "react";
const App = () => {
const [value, setValue] = useState("");
const onChangeHandler = (event) => {
const inputValue = event.target.value;
setValue(inputValue);
};
console.log(value) // value๊ฐ ์ด๋ป๊ฒ ๋ณํ๋์ง ํ๋ฒ ์ฝ์๋ก ๋ณผ๊น์?
return (
<div>
<input type="text" onChange={onChangeHandler} value={value} />
</div>
);
};
export default App;
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์์์ ์๋ฐ์คํฌ๋ฆฝํธ์ event ๊ฐ์ฒด๋ฅผ ๊บผ๋ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ input์ ๊ฐ์ event.target.value ๋ก ๊บผ๋ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก state์ธ value๋ฅผ input์ attribute์ธ value์ ๋ฃ์ด์ฃผ๋ฉด input๊ณผ state ์ฐ๊ฒฐํ๊ธฐ, ๋ ์ ๋๋ค!
React๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์ JavaScirpt๋์ ๋น์ทํ๋ฉด์ ๋ค๋ฅธ ๋๋์ ๋ฐ์๋ท..!!
React์ ์ ์ผ ์ค์ํ ๋ถ๋ถ์ด์ฌ์ ํ๋ก์ ํธ๋ค ์์ํ๋ค๋ณด๋ฉด ๋ ์ต์ํด ์ง ์ ์๊ฒ ๋ง์ด ์ฐ์ตํด๋ด์ผํ ๊ฑฐ ๊ฐ๋ค.
์ ์ผ ์ค์ํ ๊ธฐ๋ณธ ํ!!
const [state, setState] = useState(์ด๊ธฐ๊ฐ | ๋ฐฐ์ด๋ ๊ฐ๋ฅํ๋ค)