์ปดํฌ๋ํธ?
- UI๋ฅผ ๊ตฌ์ฑํ๋ ๋ ๋ฆฝ์ ์ธ ๋ชจ๋ ์ ๋๋ค.
- ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, ๊ฐ ์ปดํฌ๋ํธ๋ ์์ฒด์ ์ธ UI์ ์ํ(state)๋ฅผ ๊ฐ์ง๋๋ค.
- props์ state๋ฅผ ๊ฐ์ง๋๋ค.
- ๋๋ฌธ์๋ก ์์ํ๊ณ , return๋ฌธ์๋ UI์์๋ฅผ ์์ฑํฉ๋๋ค.
(React๋ ์๋ฌธ์๋ก ์์ํ๋ ์ปดํฌ๋ํธ๋ฅผ DOM ํ๊ทธ๋ก ์ฒ๋ฆฌ ํจ)
props : ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๋ ๋ฐ์ดํฐ
state : ์ปดํฌ๋ํธ ์์ฒด์์ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ, state๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๋ ๋ค์ ๋ ๋๋ง ๋จ.(โญ๏ธhook)
์ปดํฌ๋ํธ๋ ํจ์ํ ์ปดํฌ๋ํธ์ ํด๋์ค ์ปดํฌ๋ํธ๋ก ๋๋ ์ ์์ต๋๋ค.
ํจ์ํ ์ปดํฌ๋ํธ๋ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ UI๋ฅผ ๊ตฌ์ฑํ๋ ์ปดํฌ๋ํธ์ ๋๋ค.
ํด๋์คํ ์ปดํฌ๋ํธ๋ณด๋ค ๊ฐ๋จํ๊ฒ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ต๊ทผ์๋ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ถ์ธ์ ๋๋ค.
๊ทธ๋ผ ํจ์ํ ์ปดํฌ๋ํธ์ ๋ํด์ ๋ ์์ธํ ์์๋ณผ๊น์?
ํจ์ํ ์ปดํฌ๋ํธ
- props๋ฅผ ๋ฐ์์ UI๋ฅผ ๋ ๋๋งํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
- ํจ์ํ ์ปดํฌ๋ํธ๋ ํจ์๋ฅผ ๋ฐํํ๋ฏ๋ก, ์ปดํฌ๋ํธ์ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ค ๋ช ํํ๊ฒ ํ์ ํ ์ ์์ต๋๋ค.
props
props?
๐ property์ value๋ฅผ ๋ฐ๋ ๋ฉ์ด๋ฆฌ ๊ฐ์ฒด
๐ property(์์ฑ)์ ์ค์๋ง๋ก ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ์๊ฒ ์ด๋ฆ, ๋์ด, ์ด๋ฉ์ผ ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
๐ props๋ ๋ถ๋ณ์ฑ์ ๊ฐ์ง๋ฏ๋ก, props๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๐ ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ๊ฐ์ฒด ๋ฆฌํฐ๋ด๋ก ๋ง๋ค์ด์ ธ์ ์์์ ๋ฐ์..(?
๊ธฐ๋ณธ ์์
๐ท WelcomeProp
์ปดํฌ๋ํธ๋ props
๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์์, name
์์ฑ์ ์ถ๋ ฅํฉ๋๋ค.
๐ท App
์ปดํฌ๋ํธ์์๋ name
์์ฑ์ React
๊ฐ์ ์ ๋ฌํ์ฌ, WelcomeProp
์ปดํฌ๋ํธ๋ฅผ ํธ์ถํฉ๋๋ค.
import './App.css';
// ๋งค๊ฐ๋ณ์์ ๋ค์ด๊ฐ๋ props๋ ํ๋์ ๊ฐ์ฒด..(?)
function WelcomeProps(props) { // ์ปดํฌ๋ํธ
return <h1>Hello, {props.name} {props.age}์ด</h1>
}
function App() {
const element = <WelcomeProps name="๊ณฐ๋์ด์ฌ์ก์ฌ" age="10" /> // ์๋์ผ๋ก 'props' ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ด ์์ฑ๋์ด ์ ๋ฌ๋จ.
return (
<>
<div>{element}</div>
</>
);
}
export default App;
import './App.css';
// ๋งค๊ฐ๋ณ์์ ๋ค์ด๊ฐ๋ props๋ ํ๋์ ๊ฐ์ฒด..(?)
// ์ปดํฌ๋ํธ๋ ํญ์ ๋๋ฌธ์๋ก ์์ํ๊ณ , ๋ฐํ๊ฐ์ UI ์์
function WelcomeProps(props) { // ์ปดํฌ๋ํธ
return <h1>{props.name} : {props.age}์ด</h1>
}
function App() {
// ์๋์ผ๋ก 'props' ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ด ์์ฑ๋์ด ์ ๋ฌ๋จ.
return (
<>
<WelcomeProps name="ํ๊ธธ๋" age="18" />
<WelcomeProps name="ํ์๋ด" age="22" />
</>
);
}
export default App;
์ฌ์ฌ์ฉ
import './App.css';
function WelcomeProp(props) {
return <h1>Hello, {props.name}</h1>
}
function App() {
return (
<div>
<WelcomeProp name="์์ ์ง" />
<WelcomeProp name="์ ๋" />
<WelcomeProp name="๋ฏธ๋ฏธ" />
</div>
);
}
export default App;
์ปดํฌ๋ํธ ํฉ์ฑ
- ์ฌ๋ฌ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์กฐํฉํ์ฌ ํ๋์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๊ฒ ์
๋๋ค.
๐ ๋ง์น, ๋ ๊ณ ๋ธ๋ญ์ ์กฐ๋ฆฝํ๋ ๊ฒ ์ฒ๋ผ...
์ด๋ ๊ฒ ํ๋ฉด ์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ถ์ํ๋ฅผ ๋์ผ ์ ์์ต๋๋ค. - React ์ฑ์์๋ ๋ฒํผ, ํผ, ๋ค์ด์ผ๋ก๊ทธ, ํ๋ฉด ๋ฑ ๋ชจ๋ ๊ฒ๋ค์ด ์ปดํฌ๋ํธ๋ก ํํ๋ฉ๋๋ค.
// ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ ๋ชจ๋์ ๋ถ๋ฌ์ค๋ ์ฝ๋
import React from "react";
function Heading(props) {
return <h1>{props.text}</h1>;
}
function Paragraph(props) {
return <p>{props.text}</p>;
}
function Section(props) {
return (
<>
<Heading text={props.title} />
<Paragraph text={props.content} />
</>
);
}
export default Section;
import './App.css';
import Section from "./0411_1_์ปดํฌ๋ํธํฉ์ฑ";
function App() {
return (
<>
<Section title="์ค๋์ ๋ ์จ" content="์ค๋์ ํ๋ฆฌ๊ณ ๋ํ์ด ์์ ๋ฉ๋๋ค." />
<Section title="์ค๋์ ์คํฌ์ธ " content="์ํฅ๋ฏผ EPL 100๊ณจ ๋ํ" />
</>
);
}
export default App;
๊ธฐ๋ณธ๊ฐ ์ค์ : defaultProps
- props ๊ฐ์ ๋ฐ๋ก ์ง์ ํ์ง ์๋ ๊ฒฝ์ฐ, ํ๋ฉด์ ๋ณด์ฌ์ค ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํฉ๋๋ค.
const MyComponent = props => {
return <div>์๋
ํ์ธ์. ์ ์ด๋ฆ์ {props.name} ์
๋๋ค.</div>;
}
MyComponent.defaultProps = {
name: "๊ธฐ๋ณธ ์ด๋ฆ"
};
export default MyComponent;
ํ๊ทธ ์ฌ์ด์ ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๋ children
- children : ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๋ ์ปดํฌ๋ํธ ํ๊ทธ ์ฌ์ด์ ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๋ props
const MyComponent = (props) => {
return (
<div>
์๋
ํ์ธ์. ์ ์ด๋ฆ์ {props.name} ์
๋๋ค.<br />
children ๊ฐ์ {props.children) ์
๋๋ค.
</div>
);
}
import './App.css';
import Mycomponent from './0411_2_MyComponent';
function App() {
let insideTag = "์ด๋";
return (
<MyComponent name="ํ๊ธธ๋">{insideTag}</Mycomponent>
);
}
export default App;
๊ตฌ์กฐ๋ถํด(๋น๊ตฌ์กฐํํ ๋น)๋ฅผ ํตํด props ๋ด๋ถ ๊ฐ ์ถ์ถ
- ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์ฑ ํน์ ๊ฐ์ ํด์ฒดํ์ฌ ๊ทธ ๊ฐ์ ๋ณ์์ ๋ด์ ํํํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์
- โญ๏ธ ๋งค๊ฐ๋ณ์๋ผ๋ฉด () ์์ ๋ด๊ฒ ์ง๋ง ๊ฐ์ฒด๋ฅผ ํด์ฒดํด์ ๋ด๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์ค๊ดํธ{}์ ๋ด์์ผ ํจ.
const MyComponent = ({name, children}) => {
return (
<div>
์๋
ํ์ธ์. ์ ์ด๋ฆ์ {name} ์
๋๋ค.<br />
children ๊ฐ์ {children} ์
๋๋ค.
</div>
);
}
์ ๊ฐ ์ฐ์ฐ์
import React from "react";
const Person = ({name, age, gender}) => {
return (
<>
<p>Name : {name}</p>
<p>Age : {age}</p>
<p>Gender : {gender}</p>
</>
);
}
export default Person;
import './App.css';
import Person from './0411_3_Person_์ ๊ฐ์ฐ์ฐ์';
// ํ์ดํ ํจ์ : const App = () => {}
function App() {
const personData = {
name : "ํ๊ธธ๋",
age : 20,
gender : "๋จ์ฑ"
}
return (
<>
<Person {...personData}/>
</>
);
}
export default App;
์ปดํฌ๋ํธ ์ถ์ถ
๐ฎ ์ถํ ์ถ๊ฐ ์์
'๐จ Frontend > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ฎ React - 6. Ref์ DOM (0) | 2023.04.13 |
---|---|
๐ฎ React - 5. ์ด๋ฒคํธ ํธ๋ค๋ง (0) | 2023.04.12 |
๐ฎ React - 4. ํจ์ ์ปดํฌ๋ํธ์์ useState ์ฌ์ฉํ๊ธฐ (2) | 2023.04.11 |
๐ฎ React - 2. JSX(JavaScript XML) (0) | 2023.04.10 |
๐ฎ React - 1. React ์์ํ๊ธฐ! (2) | 2023.04.10 |