props๋ ์ผ์ข ์ ๋ฐฉ์์ด๋ค. ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์์ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐฉ๋ฒ
์ฌ๊ธฐ ๋ ์ปดํฌ๋ํธ๊ฐ ์๋ค
๋ ์ปดํฌ๋ํธ๋ ๊ฐ์ style์ ๊ฐ์ง๋ค.
<script type="text/babel">
// ์ปดํฌ๋ํธ
function SaveBtn(){
return <button style={{
backgroundColor: "skyblue",
color: "white",
padding: "10px 20px",
border: 0,
borderRadius: 10
}}
>
Save Changes</button>;
}
function ConfirmBtn(){
return <button style={{
backgroundColor: "skyblue",
color: "white",
padding: "10px 20px",
border: 0,
borderRadius: 10
}}
>
Confirm</button>;
}
function App(){
return (
<div>
{/* JSX ๋ด๋ถ - ํจ์๋ฅผ ๋ถ๋ฆ (ํจ์ํ ์ปดํฌ๋ํธ)*/}
<SaveBtn/>
<ConfirmBtn/>
</div>
);
}
์ด style์ ์ฌ์ฌ์ฉํ๊ธฐ ์ข๊ฒ ๋ง๋๋ ค๊ณ ํ๋ค.
<img src="">
์ฐ๋ฆฌ๋ ์ด๋ฐ ๊ตฌ๋ฌธ์ ๋ง์ด ์ผ๋ค. imgํ๊ทธ ์ ๋ณด๋ฅผ ์ ์กํ๋ ๊ฒ ๊ฐ์๋ค.
syntax๋ฅผ ์ปค์คํ ์ปดํฌ๋ํธ์ ๋๊ฐ์ด ์ ์ฉํด ๋ณผ ์ ์๋ค. ์ด๊ฒ ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค. ์ปดํฌ๋ํธ๋ฅผ ์ค์ ํ๊ณ ๋ ์ฌ์ฌ์ฉํ ์ ์๋ค. ์ด์ ์ฐ๋ฆฌ๋ ์๋ก์ด ์ ๋ณด๋ฅผ Btn ์ปดํฌ๋ํธ์ ์ ์กํ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง๋ค๊ณ ์ฌ์ฉํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ () ์ด๋ฐ ์๊ดํธ๋ก ์ธ์๋ฅผ ๋ฐ๋๋ค๋ ๊ฒ์ด๋ค.
๋ฆฌ์กํธ๊ฐ ๋ฃ์ด์ค๋ค. ์ด ์ธ์ ์ด๋ฆ์ props๋ผ๊ณ ๋ถ๋ฅธ๋ค. Btn์ผ๋ก๋ถํฐ ์ ๋ฌ ๋ฐ๋ properties์ด๋ค.
์ฌ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ก ์ฝ๋๋ฅผ ์์ ํ๋ค.
<script type="text/babel">
// ์ปดํฌ๋ํธ
function Btn(props) {
console.log(props);
return <button style={{
backgroundColor: "skyblue",
color: "white",
padding: "10px 20px",
border: 0,
borderRadius: 10
}}
>
{props.propstext}
</button>;
}
function App() {
return (
<div>
{/* JSX ๋ด๋ถ - ํจ์๋ฅผ ๋ถ๋ฆ (ํจ์ํ ์ปดํฌ๋ํธ)*/}
<Btn propstext="Save" />
<Btn propstext="Continue" />
</div>
);
}
const root = document.getElementById("root");
ReactDOM.render(<App />, root);
</script>
console.log ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋ object๊ฐ ์ฐํ๋๋ฐ ์๋ํ๋ฉด Btn ์ ๋๋ฒ ๋ถ๋ ๊ธฐ ๋๋ฌธ์ด๋ค.
Btn์ด๋ผ๋ ์ด๋ฆ์ ํจ์๋ฅผ ๋ถ๋ฅด๊ณ ์๊ณ ์ ๋ณด๋ฅผ ํจ์์ ์ ์กํ๊ณ ์๋ค.
React๋ ์ฐ๋ฆฌ๊ฐ ๋ฃ์ด๋ ๋ชจ๋ ๊ฒ๋ค์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก์จ ๋ฃ์ด์ค๋ค.
์ ๋ฆฌํ์๋ฉด,
React ๋ ์๋์ผ๋ก ๋ด๊ฐ <Btn propstext="Continue" /> ์ฌ๊ธฐ์ ๋ฃ๋ ๋ชจ๋ property(prop)๋ค์
๋ชจ๋ ์ค๋ธ์ ํธ ์์ผ๋ก ๋ฃ๊ณ ์ด ์ค๋ธ์ ํธ๋ ์ปดํฌ๋ํธ์ ์ฒซ๋ฒ์งธ ์ธ์๋ก ์ฃผ์ด์ง๋ค. object์ด๊ธฐ ๋๋ฌธ์ ํค-๊ฐ์ด ์ฌ๋ฌ๊ฐ ๋ค์ด๊ฐ๋ ๋น๊ทผ ๊ฐ๋ฅ์ด๋ค.
props๋ ์ฒซ ๋ฒ์งธ์ด์ ์ ์ผํ Btn์ด ์ ๋ฌ ๋ฐ๋ ์ธ์์ด๋ค.
props.propstext ๋์ ์ด๋ ๊ฒ ์จ๋ ๋๋ค.
props๋ ์ค๋ธ์ ํธ์ด๊ธฐ ๋๋ฌธ์ {} ์ค๊ดํธ๋ฅผ ์จ์ค์ผํ๋ค.
function Btn({propstext}){
return <button style={{
backgroundColor: "skyblue",
color: "white",
padding: "10px 20px",
border: 0,
borderRadius: 10
}}
>
{propstext}
</button>;
}
์ด๋ ๊ฒ๋ ์กฐ๊ฑด๋ฌธ์ ์ ์ฉ๊ฐ๋ฅ ํ๋ค.
<!DOCTYPE html>
<html lang="en">
...
<script type="text/babel">
// ์ปดํฌ๋ํธ
function Btn({propstext, big}){
console.log(propstext, big);
fontSize: big ? 18 : 16,
>
{propstext}
</button>;
}
function App(){
return (
<div>
{/* JSX ๋ด๋ถ - ํจ์๋ฅผ ๋ถ๋ฆ (ํจ์ํ ์ปดํฌ๋ํธ)*/}
<Btn propstext="Save" big={true}/>
<Btn propstext="Continue" big={false}/>
</div>
);
}
...
</script>
</html>
props์ ๋ญ ๋ ๋ฃ์ ์ ์์๊น?
- true,false ๊ฐ๋ฅ string๋ ๊ฐ๋ฅ ํจ์๋ ๊ฐ๋ฅํ๋ค.
๋ถ๋ชจ์ปดํฌ๋ํธ๊ฐ state๋ฅผ ๋ณ๊ฒฝํ ๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง๋ ๋ณด์.
- Btn์ onClick function ๋ฌ์์ฃผ๊ธฐ
์ด onClick function์ผ๋ก App ์ปดํฌ๋ํธ์ ์๋ state๋ฅผ ๋ฐ๊ฟ๋ณผ ๊ฒ์ด๋ค.
Btn์ผ๋ก ๋ค์ด๊ฐ๋ props๋ค ์ค onClick์ ์ค์ ์ด๋ฒคํธ๋ฆฌ์ค๋๋ ์๋๋ค. ์ง๊ธ์ prop ์ด๋ฆ ์ผ ๋ฟ!
ํท๊ฐ๋ฆฌ์ง ์๊ฒ ๋ค์ ์ด๋ฆ์ ๋ฐ๊ฟ์ฃผ์๋ค.
๋ถ๋ชจ ์ปดํฌ๋ํธ์ state๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์ํ ์ปดํฌ๋ํธ ๋ชจ๋๊ฐ ์๋ก ๊ทธ๋ ค์ง๋ค.
๋ฒํผํ๋๋ง ๋ด์ฉ์ด ๋ฐ๋๋๋ฐ continue ๋ผ๊ณ ์ ํ ์ปดํฌ๋ํธ๋ ๊ฐ์ด ๋ฆฌ๋ ๋๋ง๋๋ค.
์ฐ๋ฆฌ๋ ์ด ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๊ทธ๋ ค์ง๋ ๊ฒ์ ์ํ์ง ์๋๋ค๊ณ react์๊ฒ ๋งํ ์ ์๋ค.
์ด๊ฒ์ React Memo๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ฐ๋ฆฌ๋ ์ด ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๊ทธ๋ ค์ง์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค.
prop๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ํ์์!!!!
์ฒซ ๋ฒ์งธ ๋ฒํผ์ props๋ ๋ฐ๋ ๊ฒ์ด๋ค.
์๋ props๋ ์ ๋ ๋ฐ๋์ง ์์ ๊ฒ์ด๋ค. - ์ฐ๋ฆฌ๋ react์๊ฒ rerender๋ฅผ ๋ฉ์ถ๋ผ๊ณ ๋งํ ์ ์๋ค.
React Memo
- ์ฝ๋์ฑ๋ฅ๋ฉด์์ ์ข ๋ ํจ์จ์ ์ด๋ค.
'WEB > Front-End๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
error:03000086:digital envelope routines::initialization error' (0) | 2021.12.04 |
---|---|
[React JS] Props type (0) | 2021.12.04 |
[React JS] JSX ์์๋ณด๊ธฐ (0) | 2021.12.02 |
[React] ๋ง์ง๋ง ์ ๋ฆฌ (0) | 2021.10.16 |
[React] Delete ๊ตฌํ (0) | 2021.10.16 |