ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • React.js(2) - Props
    ์›น ๊ฐœ๋ฐœ/React.js 2023. 3. 21. 09:28

    ๐Ÿ“š Props(Property)

    - ์ผ์ข…์˜ ๋ฐ์ดํ„ฐ์ด๋‹ค.

    - ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ(App.js)๊ฐ€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ(component.js)์— ๊ฐ’์„ ์ „๋‹ฌํ• ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด๋‹ค.(๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ฐ–๋Š”๋‹ค.)

    - ํ”„๋กœํผํ‹ฐ๋Š” ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.(์ž์‹์ž…์žฅ์—์„  ์ฝ๊ธฐ ์ „์šฉ์ธ ๋ฐ์ดํ„ฐ์ด๋‹ค.)

    - ํ”„๋กœํผํ‹ฐ์— ๋ฌธ์ž์—ด์„ ์ „๋‹ฌํ•  ๋•Œ๋Š” ํฐ๋”ฐ์˜ดํ‘œ(" ")๋ฅผ, ๋ฌธ์ž์—ด ์™ธ์˜ ๊ฐ’์„ ์ „๋‹ฌํ•  ๋•Œ๋Š” ์ค‘๊ด„ํ˜ธ({ })๋ฅผ ์‚ฌ์šฉ ํ•œ๋‹ค. (๋ฌธ์ž์—ด ์™ธ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ”๊ฟ”์ค€๋‹ค.)

     

    ๐Ÿ’š๊ธฐ๋ณธ์ ์ธ Props ์‚ฌ์šฉ ๊ตฌ์กฐ 

     

    App.js

    import React from 'react';
    import './App.css';
    import Props from './R017_Props';
    
    function App() {
         return (
             <div className="App">
               <h1>Start React 200!</h1>
               <p>CSS ์ ์šฉํ•˜๊ธฐ</p>
               <Props props_val = "This is Props"/>
             </div>
         )
    
    export default App;
    
    
    }

     

    R017_Props.js

    import React from "react";
    import { Component } from "react";
    
    class R017_Props extends Component {
        render() {
            let props_value = this.props.props_val; //this.props.๋’ค์— ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์ธ App.js์—์„œ ์ „๋‹ฌ๋ฐ›์€ props ๋ณ€์ˆ˜๋ช…์„ ๋ถ™์ด๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ์Œ
            props_value += 'from App.js';
            //๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— += ํ˜น์€ -=์„ ๋„ฃ์–ด์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 
            //๋ถ€๋ชจ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ props_value๋ฅผ ์˜ฎ๊ฒจ ๊ฐ€๊ณตํ•œ๋‹ค.
            // App.js์—์„œ ๋„˜๊ฒจ๋ฐ›์€ ๋ฌธ์ž์—ด์ธ(This is Props) ๋’ค์— ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด(from App.js)์„ ๋ถ™์ธ๋‹ค.: This is Props from App.js
            return (
                <div>{props_value}</div>
                //๊ฐ€๊ณตํ•œ ๋ฌธ์ž์—ด์„ ํ™”๋ฉด์— ํ‘œ์‹œํ•œ๋‹ค. 
            )
        }
    }
    
    export default R017_Props;

     

     

    โœProps์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๊ฒ€์ฆํ•˜๊ธฐ 

    ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ์„ ์–ธํ•ด์ค€ ๋’ค(function.propTypes={}) ๐Ÿ‘‰ app.js์—์„œ ๋ฐ์ดํ„ฐ ์ž…๋ ฅํ•œ ๋ณ€์ˆ˜๋“ค์„ prop์œผ๋กœ ๋ฐ›์•„์˜ค๊ธฐ (this.props)๐Ÿ‘‰๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋งž๋Š”์ง€ propTypes์—์„œ ๊ฒ€์ฆํ•œ ๋’ค ๋งž๋‹ค๋ฉด, ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์–ด ์ถœ๋ ฅํ•ด์ฃผ๊ธฐ 

     

    App.js 

    import React from 'react';
    import './App.css';
    import PropsDatatype from './R018_PropsDatatype';
    
    function App() {
        return (
            <div className="App">
              <h1>Start React 200!</h1>
              <p>CSS ์ ์šฉํ•˜๊ธฐ</p>
              <PropsDatatype
                 String = "react"
                 Number = {200}
                 Boolean = {1==1}
                 Array = {[0,1,0]}
                 ObjectJson = {{react:"๋ฆฌ์•กํŠธ", twohundred:"200"}}
                 Function = {console.log("FunctionProps : function!")}
                //๋ฌธ์ž์—ด(String), ์ˆซ์ž(Number), ๋ถˆ๋ฆฌ์–ธ, ๋ฐฐ์—ด, ๊ฐ์ฒด(ObjectJson)
                //์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ props์— ๋Œ€ํ•œ ์ž๋ฃŒํ˜•์„ ์„ ์–ธํ•ด ๋†“์œผ๋ฉด ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋„˜์–ด์˜ค๋Š” props ๋ณ€์ˆ˜๋“ค์˜ ์ž๋ฃŒํ˜•๊ณผ ๋น„๊ตํ•จ
                //์ด๋•Œ์ž๋ฃŒํ˜•์ด ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ฒฐ๊ณ  ๋ฉ”์„ธ์ง€๋กœ ์•Œ๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๋ฅผํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 
          />
            </div>
        
        )
    
    }

     

     

    R018_PropsDatatype.js 

    import React from "react";
    import { Component} from "react";
    import datatype from 'prop-types';  //๋ฐ์ดํ„ฐํƒ€์ž… ๋ฐ˜ํ™˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
    //์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ props์— ๋Œ€ํ•œ ์ž๋ฃŒํ˜•์„ 
    class R018_PropsDatatype extends Component {
        render () {
            let {
                //์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜์—ฌ props๋กœ ์ „๋‹ฌ๋œ ๊ฐ’๋“ค์„ (๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’๋“ค)์„ ํ• ๋‹นํ•ด์ค€๋‹ค. 
                String, Number, Boolean, Array, ObjectJson, Function
            } = this.props
            return (
                <div style={{padding:"0px"}}>
                    <p> StringProps : {String}</p>
                    <p>NumberRos : {Number}</p>
                    <span>Booleanprops : {Boolean.toString()}</span>   //๋ถˆ๋ฆฌ์•ˆํ˜•์€ ๋ณ€์ˆ˜๋ช….toString()์„ ํ†ตํ•ด์„œ ๋ฌธ์ž์—ดํ˜•์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.
                    <p>ArrayProps:{Array.toString()}</p>  //๋ฐฐ์—ดํ˜•์€ ๋ณ€์ˆ˜๋ช….toString()์„ ํ†ตํ•ด์„œ ๋ฌธ์ž์—ดํ˜•์œผ๋กœ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.
                    <p>Object JsonProps : {Json.stringfy(ObjectJson)}</p>  //๊ฐ์ฒดํ˜•์€ Json.stringfy(๋ณ€์ˆ˜๋ช…)์„ ํ†ตํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.
                    <p>Function Props : {Function}</p>
                    //์—ฌ๊ธฐ์„œ App.js์—์„œ ๋„˜์–ด์˜จ๊ฐ’๋“ค์ด ๋ฐ์ดํ„ฐํƒ€์ž…๊ณผ ๋งž๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ๋งž๋‹ค๋ฉด ๊ทธ ๊ฐ’๋“ค์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค. 
    
                    
                </div>
            )
        }
    }
    //์ด ์ปดํ“จ๋„ŒํŠธ์—์„œ props์— ๋Œ€ํ•œ ์ž๋ฃŒํ˜•๋“ค์„ ์„ ์–ธํ•ด๋†“์•˜์Œ 
    R018_PropsDatatype.propTypes = {
        String : datatype.string,  // ๋ฌธ์ž์—ดํ˜•
        Number:datatype.number,  // ์ˆซ์žํ˜•
        Boolean : datatype.bool,  //๋ถˆ๋ฆฌ์•ˆํ˜•
        Array : datatype.array, // ๋ฐฐ์—ดํ˜•
        ObjectJson : datatype.object,  //๊ฐ์ฒดํ˜•
        Function : datatype.func, //ํ•จ์ˆ˜ํ˜•
    
    }
    
    export default R018_PropsDatatype;

     

    โœprops ์œ ํ˜•๋ณ„ ์ถœ๋ ฅํ•˜๊ธฐ 

     

    ๐ŸฅBooleanProps

    - true, false๋งŒ ์ •์˜ ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒํ˜•

    - ์ค‘๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ ์ „๋‹ฌํ•  ํ•„์š” ์—†์Œ. ํ”„๋กœํผํ‹ฐ์˜ ์ด๋ฆ„๋งŒ ์„ ์–ธํ•˜๋ฉด ๋œ๋‹ค.

     

    App.js

    import React from 'react';
    import './App.css';
    import PropsBoolean from './R019_PropsBoolean';
    
    
    function App() {
        return (
        <div className="App">
          <h1>Start React 200!</h1>
          <p>CSS ์ ์šฉํ•˜๊ธฐ</p>
          <PropsBoolean BooleanTrueFalse= {false}/>
          //Booleanprops ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์ฃผ๊ณ  false๊ฐ’์„ ๋‹ด์•„ props์— ์ „๋‹ฌํ•ด์ค€๋‹ค. 
          <PropsBoolean BooleanTrueFalse/>
          //์ด๊ฒƒ๋„ ์œ„์ฒ˜๋Ÿผ PropsTrueFalse ๋ณ€์ˆ˜์— ์„ ์–ธํ•˜์ง€๋งŒ ์œ„์ฒ˜๋Ÿผ ํ• ๋‹น์€ ํ•ด์ฃผ์ง€ ์•Š๊ณ  props์— ๋‹ด์•„ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•œ๋‹ค. 
    
        </div>
        
        
        
        )
    }
    
    export default App;
    
    //์ฝ˜์†”์ฐฝ์„ ํ™•์ธํ•ด๋ณด๋ฉด ์ˆœ์„œ๋Œ€๋กœ
    //1.false
    //2.true๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด ํ™•์ธ๊ฐ€๋Šฅํ•˜๋‹ค. : ๊ฐ’์„ ์•„์˜ˆ ํ• ๋‹นํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๊ฐ์ฒด์˜ ์ดˆ๊ธฐ๊ฐ’์€ false๊ฐ€ ๋œ๋‹ค.

     

     

    R019_PropsBoolean.js 

    import React from "react";
    import { Component } from "react";
    
    
    class R019_PropsBoolean extends Component {
        render() {
            let {
                BooleanTrueFalse  
            } = this.props// this.props๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋œ ๊ฐ’์„ BooleanTrueFalse์— ํ• ๋‹นํ•ด์ค€๋‹ค. 
            return (
                <div>
                   
                    {BooleanTrueFalse ? '2.' : '1.'} // BooleanTrueFalse๊ฐ€ ์ฐธ์ด๋ฉด 2๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ณ  ์•„๋‹ˆ๋ฉด 1๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค๋Š” ์˜๋ฏธ. ? :๋Š” if print else print ๊ตฌ๋ฌธ๊ณผ ๋˜‘๊ฐ™์Œ   
                    {BooleanTrueFalse.toString()}
                    //Boolean ๋ณ€์ˆ˜๋Š” ์ง์ ‘ ์ถœ๋ ฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ toString() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค. false true๋กœ ์ˆซ์ž ์˜†์—๋‹ค๊ฐ€ ์ถœ๋ ฅํ•จ
                </div>
            )
        }
    
        
    }
    
    export default R019_PropsBoolean;

    โญBooleanTrueFalse.toString()

     

    ๊ฐ์ฒด์˜ ๊ฐ’์— ๋”ฐ๋ผ ๋ฌธ์ž์—ด "true" ๋˜๋Š” "false"๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

     

    ๐ŸฅObjectProps(๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ํ”„๋กœํผํ‹ฐ)

    - ์ฃผ์˜ํ•ด์•ผํ•  ์ ์ด, ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ธ์‹ํ•ด์„œ ""๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ์ฒด๋Š” ๊ฐ์ฒด์ด๋‹ค. ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— , {}๋ฅผ ๋ฌถ์–ด์„œ ์ „๋‹ฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

    -  ๊ฐ์ฒด์˜ ํ˜•ํƒœ

    ๊ฐ์ฒด : name: Lee, age: 20
    ๊ฐ์ฒด์˜ ํ‚ค : name, age
    ๊ฐ์ฒด์˜ ๊ฐ’ : Lee, 20

     

    App.js

    import React from 'react';
    import './App.css';
    import PropsObjVal from './R020_PropObjVal';
    
    function App() {
    
        return (
        
          <div className = "App">
             <PropsObjVal ObjectJson = {{react : "๋ฆฌ์•กํŠธ", twohundred:"200"}}/>
          //ObjectJson๋ณ€์ˆ˜์™€ ํ‚ค(react, twohundred)๋ฅผ ์„ ์–ธํ•˜๊ณ  value๋ฅผ ํ• ๋‹นํ•œ ๋’ค (๋ฆฌ์•กํŠธ, 200) props์— ๋‹ด์•„ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ(R020_PropObjVal)๋กœ ์ „๋‹ฌํ•จ 
          </div>
        
        
        )
    
               }
    import React, {Component} from 'react';
    import datatype from 'prop-types';
    
    class R020_PropsObjVal extends Component{
        render() {
            //ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด props๋กœ ์ „๋‹ฌํ•œ ๊ฐ’์„ ํ• ๋‹นํ•ด์ค€๋‹ค. 
    
            let {
                ObjectJson 
            } = this.props
            return (  //return์—์„œ ํ™”๋ฉด์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค. 
                <div style = {{padding : "0px"}}>
                    //JSON.stringify : JavaScript ๊ฐ’์ด๋‚˜ ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•จ 
                    {JSON.stringify(ObjectJson)}  // key์™€ value๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด์ค€๋‹ค. 
    
                </div>
            )
        }
        
    
    }
    
    R020_PropsObjVal.propTypes = {
        ObjectJson : datatype.shape({ //shape ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•œ ObjectJson์˜ ๋‚ด๋ถ€ key๊ฐ’(react, twohundred)์— ์„ ์–ธํ•œ๋‹ค. twohundred๊ฐ€ ๋ฌธ์ž์—ด("200")๋กœ ์ „๋‹ฌ๋์ง€๋งŒ, ์ž๋ฃŒํ˜•์ด number๋กœ ์„ ์–ธํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž…์ด ์ผ์น˜ํ•˜์ง€ ์•Š์•„ ๊ฒฝ๊ณ ๋ฉ”์„ธ์ง€๊ฐ€ ๋œฌ๋‹ค. 
            react : datatype.string,
            twohundred : datatype.number
        })
    }
    
    export default R020_PropsObjVal;

     

     

    โญ๊ฐ์ฒด ๋ณ€์ˆ˜๋ช… : datatype.shape({ ๊ฐ์ฒด ๋ณ€์ˆ˜์˜ key.์ง€์ •ํƒ€์ž…})

    ObjectJson : datatype.shape({ 
            react : datatype.string,
            twohundred : datatype.number
        })

    - App.js์˜ ๋ณ€์ˆ˜์˜ key๋“ค์˜ ์ง€์ •ํƒ€์ž…์„ ์ •ํ•ด์ฃผ์–ด, ์ง€์ •ํƒ€์ž…๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

    -App.js์˜ twohundred๊ฐ€ "200"์œผ๋กœ ๊ฑด๋„ˆ์™”๋‹ค โžก ์—ฌ๊ธฐ์„œ ์ง€์ •ํ•ด์ค€ datatype.shape์€ number์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฃŒํ˜• ๋ถˆ์ผ์น˜๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋œจ๊ฒŒ ๋œ๋‹ค. 

Designed by Tistory.