https://www.youtube.com/watch?v=DuJC2ATdGtw&list=PLZKTXPmaJk8J_fHAzPLH8CJ_HO_M33e7-&index=8
props๋ properties์ ์ฝ์๋ก ์์ฑ๊ฐ์ ์๋ฏธํ๋ค.
state์ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์ดํด๋ณด์!
1) ์ฐ์ App.js์ age={}
๋ฅผ ์ถ๊ฐํ๊ณ
import "./App.css";
import Hello from "./component/Hello";
import Welcome from "./component/Welcome";
function App() {
return (
<div className="App">
<Hello age={10} /> //๐ ์ถ๊ฐ
<Hello age={20} /> //๐ ์ถ๊ฐ
<Hello age={30} /> //๐ ์ถ๊ฐ
</div>
);
}
export default App;
2) Hello.js์ function Hello()
์ props
๋ฅผ ๋ฃ์ด์ค ๋ค
{name}
์์ ({props.age})
๋ฅผ ์ถ๊ฐํ๋ค.
import { useState } from "react";
export default function Hello(props) { //๐ props ์ถ๊ฐ
console.log(props);
const [name, setName] = useState("Mike");
return (
<div>
<h1>state</h1>
<h2 id="name">
{name}({props.age})์ธ //๐ ({props.age})์ธ ์ถ๊ฐ
</h2>
<button
onClick={() => {
setName(name === "Mike" ? "Jane" : "Mike");
}}
>
Change
</button>
</div>
}
๐ console์์ function Hello(props)
๋ฅผ ํ์ธํ๋ฉด ์๋์ ๊ฐ์ ๋ด์ฉ์ ํ์ธํ ์ ์๋ค.
๐ App.js์์ props
๋ฅผ ๋ฐ์์ Hello.js์ ({props.age})
๋ฅผ ์ถ๊ฐํ๋ฉด ์ด๋ ๊ฒ ๋์จ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ์์ ๊ฐ๋ฅํ๋ค.
import { useState } from "react";
export default function Hello({ age }) { //๐ {age}๋ก ๋ณ๊ฒฝ
const [name, setName] = useState("Mike");
return (
<div>
<h1>state</h1>
<h2 id="name">
{name}({age})์ธ //๐ {age}๋ก ๋ณ๊ฒฝ
</h2>
<button
onClick={() => {
setName(name === "Mike" ? "Jane" : "Mike");
}}
>
Change
</button>
</div>
);
}
๋๊ฒจ๋ฐ์ props
๊ฐ์ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ณ๊ฒฝํ ์ ์๋ค.
๋๊ฒจ๋ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํด์ผํ๋ค.
props
๊ฐ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง๋ ๋ชปํ์ง๋ง props
๊ฐ์ ์ปดํฌ๋ํธ ๋ด๋ถ์์ state๋ก ๋ง๋ค์ด ๊ด๋ฆฌํ ์๋ ์๋ค.
const [age, setAge] = useState(props.age);
์ด๋ ๊ฒ.
๋ง์ฝ ๋๊ฒจ๋ฐ์ props
๊ฐ์ props.age=100;
๊ณผ ๊ฐ์ด ์ต์ง๋ก ๋ณ๊ฒฝ์ํค๋ฉด ์๋ฌ๊ฐ ๋๋ค.
์์๋ก, Change๋ฒํผ์ ๋๋ฅด๋ฉด ๋์ด๊ฐ +1 ๋๋๋ก ์์ฑํด๋ณด์.
import { useState } from "react";
export default function Hello(props) {
console.log(props);
const [name, setName] = useState("Mike");
const [age, setAge] = useState(props.age);
return (
<div>
<h1>state</h1>
<h2 id="name">
{name}({age})์ธ
</h2>
<button
onClick={() => {
setName(name === "Mike" ? "Jane" : "Mike");
setAge(age + 1);
}}
>
Change
</button>
</div>
);
}
์์ ๊ฐ์ด ์์ฑํ๋ฉด ๋ฒํผ์ ๋๋ ์ ๋๋์ด๊ฐ +1 ๋๋ค.
๋ค์ํ ๋ฒ ์์ฑํ๋ค.
๐ props๊ฐ์ ๋ณ๊ฒฝํ๊ฒ ์๋๋ผ, ๋๊ฒจ๋ฐ์ props๋ฅผ state๋ก ๋ง๋ค์ด ๊ด๋ฆฌํ๋ ์ค์ด๋ค.
import { useState } from "react";
export default function Hello({ age }) {
const [name, setName] = useState("Mike");
const msg = age > 19 ? "์ฑ์ธ์
๋๋ค." : "๋ฏธ์ฑ๋
์ ์
๋๋ค.";
//age๊ฐ 19๋ณด๋ค ๋ง์ผ๋ฉด "์ฑ์ธ์
๋๋ค." : age๊ฐ 19๋ณด๋ค ์ ์ผ๋ฉด "๋ฏธ์ฑ๋
์ ์
๋๋ค."
return (
<div>
<h1>state</h1>
<h2 id="name">
{name}({age})์ธ : {msg}
</h2>
<button
onClick={() => {
setName(name === "Mike" ? "Jane" : "Mike");
}}
>
Change
</button>
</div>
);
}
๐ ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๊ธฐ ์ํด์๋ ํญ์ state์ props๋ฅผ ์ฌ์ฉํด์ ์ฒ๋ฆฌํ๋๊ฒ์ด ์ข๋ค๊ณ ํ๋ค.
UserName.js๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ์๋ก ๋ง๋ค๊ณ ์๋์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
export default function UserName({ name }) {
return <p>Hello, {name}</p>;
}
// export default function UserName(props) {
// return <p>Hello, {props.name}</p>;
// }
// ํผ์ ์์ฑํด๋ณธ ์ฝ๋์ธ๋ฐ, ์์ ๊ฐ์ ์ฝ๋๋ผ๊ณ ์ดํดํ๋ค.
๊ทธ๋ฆฌ๊ณ Hello.js์ <UserName name={name} />
์ ๋ฃ์ด์ค๋ค. ์ด๋ ๊ฒ.
Auto import ๋๋๊ฑด ๋ค
return (
<div>
<h1>state</h1>
<h2 id="name">
{name}({age})์ธ : {msg}
</h2>
<UserName name={name} /> //๐ ์ถ๊ฐ
<button
onClick={() => {
setName(name === "Mike" ? "Jane" : "Mike");
}}
>
Change
</button>
</div>
);
๐ {name}: Hello.js ์ปดํฌ๋ํธ์์๋ state์ง๋ง UserName.js ์ปดํฌ๋ํธ ์
์ฅ์์๋ props๋ค.
๊ทธ๋ฆฌ๊ณ Change๋ฒํผ์ ๋๋ฅด๋ฉด {name}์ด ๊ฐ์ด ๋ฐ๋๋๊ฒ๋ ํ์ธํ ์ ์๋ค.
Jane(10)์ธ : ๋ฏธ์ฑ๋
์ ์
๋๋ค.
Hello, Jane