
๐ํด๋ฆญ ์ ์ซ์ 1์ฉ ์ฆ๊ฐ๊ธ ์์ ๋ฒํผ ํด๋ฆญ ์ ๋จ์์ฝํธ ์ถ์ฒ ์ผ ๋ ์ฌ์์ฝํธ ์ถ์ฒ์ผ๋ก, ์ฌ์์ฝํธ ์ถ์ฒ ์ผ ๋๋ ๋จ์์ฝํธ ์ถ์ฒ์ผ๋ก ๊ธ ์์ ๋ชจ๋ฌ์ฐฝ๋ฒํผ ํด๋ฆญ ์ ๋ชจ๋ฌํ๋ฉด show/hide
์ ์ฒด์ฝ๋
import { useState } from "react";
import "./App.css";
const Modal = () => {
return (
<div className="modal">
<h4>์ ๋ชฉ</h4>
<p>๋ ์ง</p>
<p>์์ธ๋ด์ฉ</p>
</div>
);
};
function App() {
//array/object๋ค๋ฃฐ ๋ ์๋ณธ ๋ณด์กดํ๋ ๊ฒ ์ข์
const [lists, setLists] = useState([
"๋จ์์ฝํธ ์ถ์ฒ",
"๊ฐ๋จ ์ฐ๋ ๋ง์ง",
"๋ฆฌ์กํธ ๊ณต๋ถ",
]);
const [count, setCount] = useState(0); //๐ ํด๋ฆญ ์ ์ซ์ ์ฆ๊ฐ
const [modal, setModal] = useState("false"); // ๋ฆฌ์กํธ ๊ณต๋ถ ๋ฒํผ ํด๋ฆญ ์ ๋ชจ๋ฌ์ฐฝ show/hide
return (
<div className="App">
<div className="black-nav">
<h4>React Blog</h4>
</div>
<div className="list">
<h4>
{lists[0]} <span onClick={() => setCount(count + 1)}>๐</span> {count}
</h4>
<button
onClick={() => {
const newList = [...lists]; //๋ฐฐ์ด ๋ด [๋๊ดํธ]๋ฅผ ์ ๊ฑฐํ๊ณ ๊ฐ์ ๋ณด์ฌ์ค
newList[0] =
lists[0] === "๋จ์์ฝํธ ์ถ์ฒ" ? "์ฌ์์ฝํธ ์ถ์ฒ" : "๋จ์์ฝํธ ์ถ์ฒ";
setLists(newList);
}}
>
๊ธ ์์
</button>
<p>6์ 21์ผ ๋ฐํ</p>
</div>
<div className="list">
<h4>{lists[1]}</h4>
<p>6์ 21์ผ ๋ฐํ</p>
</div>
<div className="list">
<h4>{lists[2]}</h4>
<p>6์ 21์ผ ๋ฐํ</p>
</div>
<div className="list">
<button
onClick={() => {
setModal(!modal); //true๋ฉด false, false๋ฉด true
}}
>
๋ชจ๋ฌ์ฐฝ
</button>
{modal === true ? <Modal /> : null}
</div>
</div>
);
}
export default App;
โ๏ธ Array Object ๋ฅผ ๋ค๋ฃฐ ๋๋ ์๋ณธ์ ๋ณด์กดํ๋ ๊ฒ ์ข๋ค
<button
onClick={() => {
const newList = [...lists]; //์๋ก์ด ๋ณ์๋ฅผ ๋ง๋ค์ด ์๋ณธ์ ๋ณด์กด
newList[0] = //newList๋ณ์์ ์ผํญ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ ํด๋ฆญ ์ ๊ธ์ ๋ฐ๋๋ ๊ธฐ๋ฅ์ ๋ฃ์ด์ค
lists[0] === "๋จ์์ฝํธ ์ถ์ฒ" ? "์ฌ์์ฝํธ ์ถ์ฒ" : "๋จ์์ฝํธ ์ถ์ฒ";
setLists(newList); // ์ํ๋ณํํจ์ ์ธ์์ ๋ณ์๋ฅผ ๋ฃ์ด์ค
}}
>
๊ธ ์์
</button>
<p>6์ 21์ผ ๋ฐํ</p>
</div>
โ๏ธ
state๋ณ๊ฒฝํจ์ ํน์ง
- ์ํ๋ณํํจ์() ๊ดํธ์์ ๊ฐ์ ๋ฃ์ผ๋ฉด ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค
- ๊ธฐ์กด
state=== ์ ๊ทstate์ ๊ฒฝ์ฐ, ์ฆ ๊ฐ์ ๊ฒฝ์ฐstate๋ณ๊ฒฝ์ด ๋ถ๊ฐํ๋ค
โ๏ธ setModal(true), setModal(!modal)์ ์ฐจ์ด
์ฒ์์๋ state modal์ ์ด๊ธฐ๊ฐ์ด false ์ฌ์ setModal(true)์ setModal(!modal) !๋ฅผ ๋ถ์ด๊ฒ ๋๋ฉด true๋ก ๋ณํ๊ฒ ๋๋๊น ๊ฐ์ ์๋ฏธ์ธ ์ค ์์๋ค
setModal(true) ์ด๋ ๊ฒ ์ฐ๊ฒ ๋๋ฉด true๋ก ๊ณ ์ ์ด ๋๊ธฐ ๋๋ฌธ์ false๋ก ๋ณํ ์ ์๊ณ , ๋ชจ๋ฌ์ฐฝ์ ์ด๋ฆฌ๋ ๊ธฐ๋ฅ๋ง ๊ฐ๋ฅํ๊ฒ ๋๋ค ๋ซํ๋ ๊ธฐ๋ฅ์ด ๋์ง ์์๊ธฐ์ ์๋ฌธ์ด ๋ค์๋ค ... ! ์๋ฏธ๋ฅผ ์ ์์๋ณด๋ฉด true ์ผ ๋๋ false๋ก, false์ผ ๋๋ true๋ก ๋ณํ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ setModal(!modal) ์ด๋ ๊ฒ ์์ฑํ๋ฉด ์ด๋ฆฌ๊ณ ๋ซํ๋ ๊ธฐ๋ฅ์ด ์ ๋๋ค !
!์ ์๋ฏธ๋ฅผ ์์ง ์๊ธฐ ์ํด ๋ค์ ๋งํด๋ณด์๋ฉด ,,
!true์ผ ๋false
!false์ผ ๋true
๋ง์ฝ์!!true์ด ์ฝ๋์ฒ๋ผ!!๋๊ฐ ์๋ ๊ฒฝ์ฐ๋false๊ฐ ๋๋ค๊ฐ ๋ค์true๋ก ๋๊ธฐ ๋๋ฌธ์true๊ฐ ๋๋ค

๐ํด๋ฆญ ์ ์ซ์ 1์ฉ ์ฆ๊ฐ๋๋ ๊ฐ๊ฐ ๊ฐ๋ณ์ ์ผ๋ก ์ฆ๊ฐ
{lists.map((list, i) => {
return (
<div className="list" key={i}>
<h4>
{lists[i]}
<span
onClick={() => {
let copy = [...count];
copy[i] = count[i] + 1;
setCount(copy);
}}
>
๐
</span>
{count[i]}
</h4>
<p>6์ 21์ผ ๋ฐํ</p>
</div>
);
})}
</div>
โ๏ธ map ํน์ง
array ์๋ฃ ๊ฐ์๋งํผ ํจ์ ์์ ์ฝ๋๊ฐ ์คํ๋๋คarray ์์ ์๋ ๋ฐ์ดํฐ๋ค์ ๋ณด์ฌ์ค๋คโ๏ธ lists์ ๋งค๊ฐ๋ณ์ ์ฒซ๋ฒ์งธ๋ ๋ฐฐ์ด์์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ปํ๊ณ , ๋๋ฒ์งธ๋ ๋ฐ๋ณต๋ฌธ ๋ ๋๋ง๋ค 0๋ถํฐ 1์ฉ ์ฆ๊ฐํ๋ ์ ์๋ฅผ ๋ปํ๋ค
{lists[0]}
{lists[1]}
{lists[1]} // ์ด๋ ๊ฒ ํ๋ํ๋ ๋ถ๋ฌ์ฃผ๋ ๊ฒ ๋ณด๋ค
{lists[i]} // ๋งค๊ฐ๋ณ์๋ก ์ค ์ ์๋ก ํํํ์ฌ ์ฝ๋๋ฅผ ์ถ์ฝํ ์ ์๋ค
โ๏ธ ๋ฐ๋ณต๋ฌธ์ผ๋ก html์ ์์ฑ ํ ๊ฒฝ์ฐ์๋ key๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค
<div className="list" key={i}> //๋ฐ๋ณต ์์ฑํ UI๋ง๋ค ๊ตฌ๋ณํ๊ธฐ ์ํด์ ๋ค๋ฅธ ํค๊ฐ์ผ๋ก ์ ์ด์ค์ผ ํ๋ค(๋งค๊ฐ๋ณ์๊ฐ ์๋๊ณ , ์ซ์๋ก ์ ์ด์ค๋ ๋๋ค)