-
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์ด๊ธฐ ๋๋ฌธ์ ์๋ฃํ ๋ถ์ผ์น๋ก ์ค๋ฅ๊ฐ ๋จ๊ฒ ๋๋ค.
'์น ๊ฐ๋ฐ > React.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React.js(6) - Reactstrap ์์ ์ค๋ช (2) (0) 2023.04.05 React.js(5) - Reactstrap ์์ ์ค๋ช (1) (0) 2023.03.29 React.js(4) - Proptypes (0) 2023.03.29 React.js(3) - jquery (0) 2023.03.21 React.js - ๋ทํ๋ฆญ์ค ํ์ด์ง ํด๋ก ์ฝ๋ฉํ๊ธฐ(1) (0) 2022.07.24