2023. 6. 20. 23:51ใStudy_Develop/ํฌ์ค์ฝ X ์ฝ๋ฉ์จ ๋ถํธ์บ ํ
๋ฒ์จ 9์ฃผ์ฐจ๋ค!
๋ญ๊ฐ ์๊ฐ์ด ๋น ๋ฅด๊ฒ ๊ฐ๋๋ฏ ๋๋๊ณ
2๋ฌ์ ์ด ํ 1๋
์ ๊ฐ์ผ๋ฉด์๋
์๊ทธ์ ๊ฐ๊ธฐ๋ ํ๊ณ
(๋ญ๋..)
๋์ถฉ ์ ์ ์ ๋๊ณ ์ด์๋ค๋ ๋ป ๊ฐ๋ค.
๊ทธ๋์ ์ฐธ ๋ง์ ์ผ์ด ์์์ง~
์ง๋๊ณ ๋ณด๋ ์ฐธ์ผ๋ก๋ ์์คํ ์๊ฐ๋ค...
์ด์ฉ๊ณ ..
์๋ก ์ ์ง์ด์น์ฐ๊ณ ,
์ค๋๋ถํฐ React์ง๋๋ฅผ ๋๊ฐ๋ค!
๊ทธ๋ผ ๋ฐ๋ก ๋ฐฐ์ด ๋ด์ฉ ๋ณต์ต์ ํ๋๋ก ํ๊ฒ ๋ค!
React ๋?
- ํ๋ฉด์ ๋ง๋ค๊ธฐ ์ํ js๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ฌ์ฉ์์ ์ํธ ์์ฉ์ด ๊ฐ๋ฅํ ๋์ UI์ ์ ๊ฐ๋ฅ
ํน์ง!
1. Data Flow
- ์๋ฐฉํฅ์ด ์๋, ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ด๋ค
2. Component ๊ธฐ๋ฐ ๊ตฌ์กฐ
- ๋
๋ฆฝ์ ์ธ ๋จ์์ ์ํํธ์จ์ด ๋ชจ๋๋ก ์ํํธ์จ์ด๋ฅผ
๋
๋ฆฝ์ ์ธ ํ๋์ ๋ถํ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ด๋ค.
- React๋ UI๋ฅผ ์ฌ๋ฌ Component๋ฅผ ์ชผ๊ฐ์ ๋ง๋ ๋ค.
- ํ ํ์ด์ง ๋ด์์ ์ฌ๋ฌ ๋ถ๋ถ์ Component๋ก ๋ง๋ค๊ณ ,
์ด๋ฅผ ์กฐ๋ฆฝํด ํ๋ฉด์ ๊ตฌ์ฑํ๋ค.
์ฅ์ >
- ์ ์ฒด ์ฝ๋๋ฅผ ํ์
ํ๊ธฐ ์ฝ๋ค
- ์ฌ์ฌ์ฉ์ฑ์ด ๋๋ค
- ๊ฐํธํจ
-์ฝ๋์ ์ ์ง๋ณด์, ๊ด๋ฆฌ๊ฐ ์ฉ์ด
3. Virtual Dom
DOM: DocumentObject Model
๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ
4. Props and State
- props : ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํด์ฃผ๋ ๋ฐ์ดํฐ
- ์์์์๋ props๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ,
props๋ฅผ ์ ๋ฌํ ์ต์์์์๋ง ๋ณ๊ฒฝ ๊ฐ๋ฅ
- statue : ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ ์ธ๋๊ณ
๋ด๋ถ์์ ๊ฐ์ ๋ณ๊ฒฝ
- ํด๋์คํ ์ปดํฌ๋ํธ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ,
๊ฐ๊ฐ์ statue๋ ๋
๋ฆฝ์ ์ด๋ค.
5. JSX
- react์์ jsx์ฌ์ฉ์ด ํ์๋ ์๋์ง๋ง ๋ง์ด ์ฌ์ฉ๋จ
- jsx= javascript + xml
React ํ์ผ๋ค์ ๋ํด
npx create-react-app {์ฑ์ด๋ฆ}
react๋ฅผ ๊น์์ฃผ๋ฉด ์๋์ผ๋ก ์์ฑ๋๋ ํ์ผ๋ค์ด ์๋ค.
1. index.js
2. App.js
3. index.html
1. index.js
- srcํด๋์ ํฌํจ๋์ด ์๋ค.
- ๋ฉ์ธ ํ๋ก๊ทธ๋จ
- ์ฌ๊ธฐ์์ html ํ ํ๋ฆฟ ๋ฐ js์ ์ปดํฌ๋ํธ๋ฅผ ์กฐํฉํ์ฌ ๋ ๋๋งํ๊ณ ์ค์ ํ์
2. App.js
- srcํด๋์ ์๋ค.
- ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ๋ ํ๋ก๊ทธ๋จ
- ์ค์ ๋ก ํ๋ฉด์ ํ์๋๋ ๋ด์ฉ ๋ฑ์ ์ฌ๊ธฐ์์ ์ ์
3. index.html
- publicํด๋์ ์๋ค.
- ๋ฉ์ธ ํ๋ก๊ทธ๋จ์ธ index.js์ ๋์๋๋ ๊ฒ์ผ๋ก,
html ํ ํ๋ฆฟ ํ์ผ ์ด๋ค.
- ์ด ํ์ผ์ด ์ง์ ํ์๋๋ ๊ฒ์ ์๋๊ณ ,
index.js์ ์ํด ์ผ์ด ์์ ๋ ๋๋ง ๋ ๊ฒฐ๊ณผ๊ฐ ํ์๋๋ค.
index.js>
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import Clock from "./Clock";
const root = ReactDOM.createRoot(document.getElementById("root"));
setInterval(() => {
root.render(
<React.StrictMode>
<Clock />
</React.StrictMode>
);
}, 1000);
- ์ต์ด์ react, react-dom๋ผ๋ ๋ชจ๋์ ๋ก๋ํ๊ณ ์๊ณ ,
์ด๊ฒ๋ค์ด react์ ๋ณธ์ฒด์ด๋ค!
const root= ~
- ์ด๋ฐ ์์ผ๋ก react์์ ๋ฃจํธ๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์
react์ ํ๋ฆฌ์ผ์ด์
์ ๋ ๋๋งํ ์ ์๋ Dom์์ '๋ฃจํธ'๋
ธ๋๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ ์๋ฏธ
- document.getElementById("root")๋ถ๋ถ์
๋ฃจํธ๊ฐ ์์ฑ๋์ด์ผ ํ๋ Dom์์๋ฅผ ์ง์ ํ๋๋ฐ ์ฌ์ฉ
App.js>
function Clock() {
return (
<>
<div>
<h1>ํ์ฌ ์๊ฐ์ : {new Date().toLocaleTimeString()} </h1>
</div>
</>
);
}
export default Clock;
์ด๋ฐ์์ผ๋ก component๋ฅผ ๋ง๋ค ์ ์๋ค!
JSX ๋ฌธ๋ฒ
1. html์ class๋ฃ์ ๋ className์ ์ฌ์ฉ
2. ๋ณ์ html์ ๊ฝ์ ๋ฃ์ ๋๋ {์ค๊ดํธ}
function App(){
let post = '๊ฐ๋จ ์ฐ๋ ๋ง์ง';
return (
<div className="App">
<div className="black-nav">
<div>๋ธ๋ก๊ทธ์</div>
<div>{ post }</div>
</div>
</div>
)
}
์๋ฐ ์์ผ๋ก!
href, id, className, src๋ฑ ์ฌ๋ฌ๊ฐ์ง html์์ฑ๋ค์๋ ๊ฐ๋ฅํ๋ค
๋ณ์์ ์๋ ๊ฑธ html์ ๊ฝ์๋ฃ๋ ์์
์
'๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ' ์ด๋ผ๊ณ ํ๋ค.
3. html์style์์ฑ ๋ฃ๊ณ ์ถ์ผ๋ฉด
<div style={ {color : 'blue', fontSize : '30px'} }> ๊ธ์จ </div>
์ด๋ ๊ฒ
style = { } ์์ { } ์๋ฃํ์ผ๋ก ์ง์ด๋ฃ๋๋ค.
Component
- MVC View๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ๊ตฌ์ฑํด ์ฌ์ฌ์ฉํ ์ ์๊ณ ,
์๋ก์ด ์ปดํฌ๋ํธ๋ ๋ง๋ค ์ ์๋ค.
- ๋ฐ์ดํฐ(Props)๋ฅผ ์
๋ ฅ ๋ฐ์ View์ํ(State)์ ๋ฐ๋ผ
Dom Node๋ฅผ ํธ์ถํ๋ค.
- ui๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ๋ณ์ ์ธ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ๋๋๊ณ ,
๊ฐ ์กฐ๊ฐ์ ๊ฐ๋ณ์ ์ผ๋ก ๋๋์ด ์ฝ๋ฉ์ด ๊ฐ๋ฅํ๋ค.
1. ํด๋์คํ ์ปดํฌ๋ํธ
2. ํจ์ํ ์ปดํฌ๋ํธ
์ ์ ๋ฐฉ๋ฒ๊ณผ ์ํ ๋ฐ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฐจ์ด๊ฐ ์๋ค.
props๋?
- properties๋ฅผ ์ค์ธ ํํ์ผ๋ก
์ปดํฌ๋ํธ ์์ฑ์ ์ค์ ํ ๋ ์ฌ์ฉํ๋ ์์
- ์์ ์ปดํฌ๋ํธ์์ ํ์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ(๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ)
ํจ์ํ ์ปดํฌ๋ํธ props
์ฌ์ฉ๋ฒ!
- defaultProps
: ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ props๊ฐ ์ ๋ฌ๋์ง ์์์ ๋
๊ธฐ๋ณธ ๊ฐ์ผ๋ก ๋ณด์ฌ์ค props๋ฅผ ์ค์
Best.defaultProps = {
title: "๋์ ํ๋ฃจ๋ 4์ 40๋ถ์ ์์๋๋ค",
author: "๊น์ ์ง",
};
์ด๋ฐ ํ์!
- props.children
- propTypes
: ์ปดํฌ๋ํธ์ ํ์props๋ฅผ ์ง์ ํ๊ฑฐ๋
props์ ํ์
์ ์ง์ ํ ๋ ์ฌ์ฉ
:์ ํด์ง ํ์
์ด ์๋ ๋ค๋ฅธ ํ์
์ผ๋ก ์ ๋ณด๊ฐ ์ ๋ฌ ๋ ์,
์ ๋๋ก ๋์์ ํ์ง๋ง console์ ์ค๋ฅ๊ฐ ๋์จ๋ค.
state๋?
- ์ ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ๊ฐ์ฒด
- ๊ณ์ํด์ ๋ณํ๋ ํน์ ์ํ
- ์ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋์์ ํ๋ค.
- ์ฌ์ฉ ์ด์ ?
: state๊ฐ ๋ณ๊ฒฝ๋ ์ ์๋์ผ๋ก ์ฌ๋๋๋ง ๋๊ธฐ ๋๋ฌธ
: ์ด ์ ์ด ๋ณ์์ ๋ค๋ฅธ์
state vs. props
- props๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ์
๋ฐ์ดํฐ ์ ๋ฌ์ ์ฌ์ฉ๋๋ ๊ฒ
- state๋ ํน์ ์ปดํฌ๋ํธ๊ฐ ๊ฐ๋ ์ํ(๊ฐ)
ํจ์ํ ์ปดํฌ๋ํธ์ useState()
- useStateํจ์์ ์ธ์์๋ ์ํ์ ์ด๊ธฐ ๊ฐ
(๊ฐ์ ํํ๋ ์ซ์์ผ์๋, ๋ฌธ์์ผ์๋,
๋ฐฐ์ด์ผ ์๋ ์๋ค.)
- useStateํจ์๋ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
const [ message, setMessage ] = useState(" ");
message๋ ํ์ฌ ์ํ๋ฅผ ๋งํ๋ค.
setMessage๋ ์ํ๋ฅผ ๋ฐ๊ฟ์ฃผ๋ setterํจ์์ด๋ค.
("")๋ ์ํ์ ์ด๊ธฐ๊ฐ์ ๋งํ๋ค.
์ค์ต1.
function Change() {
const [message, setMessage] = useState("๊ฒ์ ์");
const [color, setColor] = useState({ color: "black" });
const Red = () => {
{
setMessage("๋นจ๊ฐ์");
setColor({ color: "red" });
}
};
const Blue = () => {
{
setMessage("ํ๋์");
setColor({ color: "blue" });
}
};
return (
<div>
<h1 style={color}>{message} ๊ธ์จ</h1>
<button onClick={Red}>๋นจ๊ฐ์</button>
<button onClick={Blue}>ํ๋์</button>
</div>
);
}
export default Change;
์ด ์ฝ๋๋ฅผ ์์ฑํ ๋
color๋ฅผ ์ด๋ป๊ฒ ์ค์ผํ ์ง ๋ชฐ๋ผ ์ด์ง ํค๋งค์๋ค
์ค์ต 2.
class UpDown extends React.Component {
constructor(props) {
super(props);
this.state = {
number: 0,
};
}
up = () => {
this.setState({ number: this.state.number + 2 });
};
down = () => {
this.setState({ number: this.state.number - 1 });
};
render() {
const { number } = this.state;
return (
<div>
<h1>{number}</h1>
<button onClick={this.up}>+2</button>
<button onClick={this.down}>-1</button>
</div>
);
}
}
์ค์ต 3.
const FunctionUpDown = () => {
const [number, setNumber] = useState(0);
const increase = () => {
setNumber(number + 1);
};
const decrease = () => {
setNumber(number - 2);
};
return (
<div>
<p>Number: {number}</p>
<button onClick={increase}>Increase</button>
<button onClick={decrease}>Decrease</button>
</div>
);
};
์ด์ ์ค๋ ๋ฐฐ์ด react๋ด์ฉ์ ์ ๋ฆฌํด ๋ณด์๋ค..
๊ทธ๋ฆฌ๊ณ ์์ฆ์...
๊ทธ๋ฆฌ๊ณ ๋ฒ์จ 6์๋ ๋๋๊ฐ๋ค๋ ์ฌ์ค์
์์ค๋ผ์น๊ฒ ๋๋
(์ฌ์ค ์์ค๋ผ์น์ง ์์๊ณ ๋๋ผ๊ธด ํจ)
์ํด๊ฐ ์๊ทธ์ ๊ฐ์๋ฐ..
(์ด๊ฑด ๋ ์)
๋ฒ์จ ์๋ฐ๊ธฐ๊ฐ ์ง๋๊ณ
ํ๋ฐ๊ธฐ๊ฐ ๋จ์๋ค
23์ด์ ์๋ฐ๊ธฐ ์ธ์์ด ์ ๋ง
์.์.๊ฐ์
์ง๋๊ฐ ๊ฒ ๊ฐ๋ค
23์ด ํ๋ฉด ๋ญ๊ฐ ์์ ๋์ด 23์ด
๋ง ํ๋ณต๋ง ํ๊ณ ๊ทธ๋ด ์ค ์์๋๋ฐ
ํ์ค์ ..
์....
#์ํ๋๊น_์ฒญ์ถ์ด๋ค
๋งค์ผ ๋ฐค๋ง๋ค ๊ธฐ์์ฌ ์์ ๊ณฑ๋ฑ์ด๊ฐ ๋์..
์ฝ์ผ๋ก 5๋ง๋ฆฌ์ฉ ์ฃฝ์ด๋ฉด์ ๋ค์ด๊ฐ๋ค..
์ผ๋ง์ ํ์ฅ์ค์์ ๋ฐํด๋ฒ๋ ๊ฐ ๋์๋ค..

์ ๋ํฌ๋ค๊น์ง ๋๋ฅผ ํ๋ค๊ฒ ํ๋..
๊ทธ๋ฆฌ๊ณ ์ผ๋ง์ ๊ฐ์์ค์ ๋ฌด์จ ๊ธฐ์ด์ด ๋์๋
์ ๋ฐ ์ด์ ๊ฐ๊ธฐ์ ๊ฑธ๋ ค ๋จ์ฒด ์กฐํด๋ฅผ ํ๋ค
์ค๋๋ง์ ์ง์ง ๊ฒ๋ ์ํ ๋ค
์๋ฌด๋ ์๋ ํ์ง์์ ์๋ฆ์๋ฆ ์์๋๋ ์ ๋ง ์๋ฌ์ ๋ค ใ
#์ง์ง_์ํ๋๊น_์ฒญ์ถ์ด๋ค
๋๊ฐ ์ ํํ ๊ธธ์ด๋ค
#๋ฒํ จ๋ผ

๊ทธ๋ฆฌ๊ตฌ
๋ค์์ธ๋ ์์ธ ์จ ๊ธฐ๋ ์ผ๋ก ๊ฐ ์นด๋ฏธ์ผ!
๋๊ฐ์ง์ ๋์์ ์จ์ดํ ์ด ์์ฒญ ๊ธธ์๋๋ฐ
๊ธฐ๋ค๋ฆฐ ๋ณด๋์ด ์๋ ๋ง์ด์๋ค!
๊ทธ๋ฆฌ๊ณ ์ฒญ์ฃผ ์ง์์ ํํ๋ฃจ ๊ฐ๊ฒ ์๊ฒจ์ ์ฒจ ๋จน์ด๋ดค๋๋ฐ
์...
๋ค์ ์์ฌ๋จน์ ๋ฏ ใ
์ด๋นจ ์ฉ๋ ๋ง
๋๋ฌด ๋ฌ์์ ์
์ด ๋ง ์ชผ๊ทธ๋ผ๋๋ ๋ง
๊ทธ๋ผ ์ด๋ง..