๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
WEB/Front-End๐ŸŒ

[React JS] Props

by narang111 2021. 12. 4.

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