App.js
import React, { useState } from "react";
import "./styles.css";
export default function App() {
const [person, setPerson] = useState({
// person์ ์ด๊ธฐ๊ฐ
name: "์ ์งํ",
work: "๊ฐ๋ฐ์",
mentor: {
name: "๋ง์ดํด",
work: "์๋์ด๊ฐ๋ฐ์"
}
});
return (
<div className="App">
<h1>
{person.name}์ {person.work}์
๋๋ค.
</h1>
<h4>
{person.name}์ ๋ฉํ ๋ {person.mentor.name} ({person.mentor.work}
)์
๋๋ค.
</h4>
<button
onClick={() => {
const aa = prompt("์๋ก์ด ๋ฉํ ์ ์ด๋ฆ์?");
setPerson((person) => ({
...person,
mentor: {
...person.mentor,
name: aa // ๋ณ์ aa๊ฐ name์ผ ๋ name์ผ๋ก ์ถ์ฝ ๊ฐ๋ฅ
}
}));
}}
>
๋ฉํ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ
</button>
<button
onClick={() => {
const work = prompt("์๋ก์ด ๋ฉํ ์ ์ง์
์?");
// ๊ธฐ์กด์ ์๋ ๊ฐ ์ ๋ถ ์ถ๋ ฅ
// ...person.mentor : person์์ ์๋ metnor๋ค์ ์ ๋ถ ๊ฐ์ ธ์ด
setPerson((person) => ({
...person,
mentor: {
...person.mentor,
work
}
}));
}}
>
๋ฉํ ์ง์
๋ฐ๊พธ๊ธฐ
</button>
</div>
);
}
App.js
import React, { useState } from "react";
import "./styles.css";
export default function App() {
const initialState = {
// person์ ์ด๊ธฐ๊ฐ
name: "์ ์งํ",
work: "๊ฐ๋ฐ์",
mentors: [
{
name: "๋ง์ดํด",
work: "์๋์ด๊ฐ๋ฐ์"
},
{
name: "ใ
ใ
ใ
",
work: "ํ์ฅ"
},
{
name: "๊ผฌ๋ง",
work: "๊ฐ์์ง"
}
]
};
// ๋ฉํ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ ํจ์ ์ ์
const updateMento = () => {
const prev = prompt("๋ฐ๊พธ๊ณ ์ถ์ ์ด๋ฆ์?");
const current = prompt("์๋ก ์ง์ ํ ์ด๋ฆ์?");
setPerson((person) => ({
...person, // person ์ ์ฒด ๋์ด(name, work, mentos)
/*
์ค๋ธ์ ํธ ๋จ์๋ก map ๋๋ฆผ
person.mentors ๋ผ๋ array๋ฅผ map์ ์ฌ์ฉํ์ฌ item{} ๊ธฐ์ค์ผ๋ก ํ๋์ฉ ๊ฒ์ฌ
*/
mentors: person.mentors.map((item) => {
// prev๊ฐ์ด ๊ฐ์ ๊ฒ์ด ์๋์ง ํ์ธ. item์ ์ด๋ฆ์ด prev์ ๊ฐ์ผ๋ฉด,
if (item.name === prev) {
// name์ ๋์ค์ ์
๋ ฅํ ๊ฐ(current)๋ก ๋ฐ๊ฟ์ค
return { ...item, name: current };
}
return item;
})
}));
};
// ๋ฉํ ์ญ์ ํจ์ ์ ์
const deleteMento = () => {
const del = prompt("์ญ์ ํ๊ณ ์ถ์ ์ด๋ฆ์?");
setPerson(() => ({
...person,
// array๋ฅผ ์ญ์ ํด์ผ ํ๋ฏ๋ก map ๋์ filter ์ฌ์ฉ (* filter๋ ๋ฆฌํด๊ฐ์ด array)
mentors: person.mentors.filter((item) => item.name !== del)
}));
};
// ๋ฉํ ์ถ๊ฐ ํจ์ ์ ์
const addMento = () => {
const name = prompt("์ถ๊ฐํ ๋ฉํ ์ ์ด๋ฆ์?");
const work = prompt("์ถ๊ฐํ ๋ฉํ ์ ์ง์
์?");
setPerson(() => ({
...person,
mentors: [person.mentors, { name, work }]
}));
};
const [person, setPerson] = useState(initialState);
return (
<div className="App">
<h1>
{person.name}์ {person.work}์
๋๋ค.
</h1>
<h4>{person.name}์ ๋ฉํ ๋ : </h4>
{/* ์ธ ๋ฒ์งธ ๋ฉํ - {person.mentors[2].name} */}
<ul>
{person.mentors.map((item, index) => (
<li key={index}>
{item.name} ({item.work})
</li>
))}
</ul>
<button onClick={updateMento}>๋ฉํ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ</button>
<button onClick={deleteMento}>๋ฉํ ์ญ์ </button>
<button onClick={addMento}>๋ฉํ ์ถ๊ฐ</button>
</div>
);
}
์ฒซ ํ๋ฉด
์ด๋ฆ ๋ณ๊ฒฝ
์ญ์
์ถ๊ฐ