[React] Propsλ? μ»΄ν¬λνΈμ λ°μ΄ν° μ λ¬νλ νλ‘νΌν°
π Props λ 무μμΈκ°
- props(property)λ μμ μ»΄ν¬λνΈκ° νμ μ»΄ν¬λνΈμ κ°μ μ λ¬ν λ μ¬μ©νλ μμ±μ λλ€.
- μμ μ»΄ν¬λνΈκ° νμ μ»΄ν¬λνΈμ κ°μ μ λ¬νκΈ° λλ¬Έμ λ¨λ°©ν₯ λ°μ΄ν° νλ¦μ κ°μ΅λλ€.
- λΆλͺ¨ μ»΄ν¬λνΈλ μμ κ°λ₯νμ§λ§, μμ μ»΄ν¬λνΈλ μ½κΈ°λ§ κ°λ₯ν©λλ€.
π Props μ¬μ©νκΈ° : λ¨λ°©ν₯ λ°μ΄ν° νλ¦
props λ₯Ό μ¬μ©νλ €λ©΄ λ λ¨κ³κ° νμν©λλ€.
1) μμ μ»΄ν¬λνΈμμ Propsλ₯Ό μ§μ νκ³ , 2) νμ μ»΄ν¬λνΈμμ λ°μ Propsκ°μ λ λλ§ν΄μΌ ν©λλ€.
μ΄ λ μμ μ»΄ν¬λνΈμμ νμ μ»΄ν¬λνΈλ‘ νλ‘νΌν°κ° μ λ¬λλλ° μ΄κ²μ΄ "λ¨λ°©ν₯ λ°μ΄ν° νλ¦" μ λλ€.
1) μμ μ»΄ν¬λνΈμμ Props μ§μ νμ¬ λκΈ°κΈ°
- μλ μ½λμμ App μ»΄ν¬λνΈκ° MyComponent μ»΄ν¬λνΈλ₯Ό ν¬ν¨νκ³ μμ΅λλ€.
- App μ»΄ν¬λνΈμμ MyComponentμ props κ°μ μ§μ ν΄μ£Όκ² μ΅λλ€.
- "propValue"λΌλ νλ‘νΌν°λ‘ "ν¬λ‘ 리μ‘νΈ!"λΌλ κ°μ λ겨μ€λλ€.
- μ»΄ν¬λνΈ νκ·Έ μ¬μ΄μ "Bye 리μ‘νΈ!" λΌλ κ°μ νλ² λ£μ΄μ€κ²μ.
• App.js
import React from "react";
import MyComponent from "./MyComponent";
function App() {
return(
<MyComponent propValue="ν¬λ‘ 리μ‘νΈ!">Bye 리μ‘νΈ!</MyComponent>
);
}
export default App;
2) νμ μ»΄ν¬λνΈμμ λ°μ Props λ λλ§νκΈ°
MyComponent μ»΄ν¬λνΈμμ μμ μ»΄ν¬λνΈλ‘ λΆν° λ°μ Props λ°μ΄ν°λ₯Ό λ·°μ λ λλ§ν©λλ€.
- {props.propValue} : μμ μ»΄ν¬λνΈμμ props κ°μ propsValueλ‘ μ λ¬νκΈ° λλ¬Έμ {props.propValue} λ‘ λνλ λλ€.
- {props.children} : 리μ‘νΈ μ»΄ν¬λνΈ νκ·Έ μ¬μ΄μ λ΄μ©μ 보μ¬μ£Όλ props μμ±μ λλ€.
μμ μ»΄ν¬λνΈμμ νκ·Έ μ¬μ΄μ μμ±ν "Bye 리μ‘νΈ!" κ° μΆλ ₯λ©λλ€.
• MyComponent.js
import React from "react";
function MyComponent(props) {
return(
<div>
{props.propValue}, {props.children}
</div>
);
}
export default MyComponent;
•κ²°κ³Ό νλ©΄
π Props νμ
propsμ μλ£νμ μλ°μ€ν¬λ¦½νΈμ μλ£νμ λͺ¨λ μ¬μ© κ°λ₯ν©λλ€.
β‘ λ¬Έμμ΄ νμ νλ‘νΌν°
- νλ‘νΌν° νμ μ΄ λ¬Έμμ΄μΈ κ²½μ°, νλ‘νΌν° κ°μ ννν λλ ν° λ°μ΄ν("")λ₯Ό μ¬μ©ν©λλ€.
<MyComponent name="ν¬λ‘ 리μ‘νΈ!"/>
β‘ λ¬Έμμ΄ μ΄μΈ νμ μ νλ‘νΌν°
- λ¬Έμμ΄ νμ μ΄μΈμ νλ‘νΌν° κ°μ μ€κ΄νΈ({ })λ₯Ό μ¬μ©ν©λλ€.
<MyComponent
boolProp= {true} //boolean
arrProp= {['a','b','c']} //λ°°μ΄
objProp= {{name:'μ½λ©μ €λ¦¬', title:'ν¬λ‘리μ‘νΈ!'}} //κ°μ²΄
funcProp= {() => { alert('μλ¦Όμ°½'); }} //ν¨μ
/>
π PropTypes : λ°μ΄ν° νμ κ²μ¦νκΈ°
propTypesλ μμ μ»΄ν¬λνΈλ‘λΆν° μ λ¬λ°μ λ°μ΄ν°μ νμ μ νμΈνλ λΌμ΄λΈλ¬λ¦¬μ λλ€.
μμ μ»΄ν¬λνΈλ‘λΆν° μ λ¬λ°μ propsκ° μ ν¨νμ§ μμ νμ μ λ°μ΄ν°κ° μ λ¬λλ κ²½μ° μ½μμ μλ¬ κ²½κ³ λ¬Έμ΄ μΆλ ₯λ©λλ€.
β‘ PropTypes μ¨μΌ νλ μ΄μ
μ€λ¬΄μμ 리μ‘νΈ μ±μ΄ 컀μ§λ κ²½μ° λ€μν propsκ° μ°μ΄κ² λ©λλ€.
νμ κ²μ¬λ₯Ό νμ©νλ©΄ νμ μΌλ‘ μΈν μ€λ₯ λ°μμ λ°©μ§ ν μ μκΈ° λλ¬Έμ propsμ μλ£νμ 미리 μ μΈν΄μ£Όλ κ²μ΄ μ’μ΅λλ€.
β‘ PropTypes μ¬μ©νκΈ° μ μ
PropTypesλ μλ 리μ‘νΈμ λ΄μ₯ λμ΄μμμΌλ React v15.5λΆν° λ€λ₯Έ ν¨ν€μ§λ‘ μ΄λνμ΅λλ€.
propTypesλ₯Ό μ¬μ©νλ €λ©΄ npm prop-types λΌμ΄λΈλ¬λ¦¬λ₯Ό μ€μΉνκ³ μ»΄ν¬λνΈ νμΌμ PropTypes λ₯Ό import ν©λλ€.
import PropTypes from 'prop-types';
β‘ propTypes μ¬μ©νκΈ°
propTypesλ₯Ό μ¬μ©νμ¬ νλ‘νΌν°λ₯Ό μ§μ ν΄λ³΄κ² μ΅λλ€. νλ‘νΌν° νμ 체ν¬λ PropType.Typeλͺ μΌλ‘ μ μΈ κ°λ₯ν©λλ€.
κΈ°λ³Έμ μΌλ‘ arry, bool, func, number, object, string λΆν° React νμ μΈ element, ν΄λμ€ μΈμ€ν΄μ€ λ± νμ 체ν¬κ° κ°λ₯ν©λλ€.
• App.js
- μμ μ»΄ν¬λνΈμμ name, age, isChecked μμ±μ νμ μ»΄ν¬λνΈλ‘ μ λ¬ν©λλ€.
<MyComponent name="μ½λ©μ €λ¦¬" age={2} isChecked={false}/>
• MyComponent.js
- νμ μ»΄ν¬λνΈμμ μ λ¬λ°μ Propsμ νμ μ 체ν¬ν©λλ€.
- PropType.string, PropType.bool λ‘ propsκ° ν΄λΉ νμ
μΈμ§ 체ν¬ν©λλ€.
- PropType.oneOf(['string','number']) : ν΄λΉ Propsκ° μ¬λ¬ μ’
λ₯ μ€νλκ° λ μ μλ νμ
μμ λνλ
λλ€.
μ λ¬λ°μ propsκ° string, number μ€ νλμ ν΄λΉνλ©΄ λ©λλ€.
import React from "react";
import PropType from 'prop-types';
function MyComponent(props) {
return(
<div>
{props.name},{props.age}, {props.isChecked ? "true" : "false"}
</div>
);
}
MyComponent.prototype = {
name : PropType.string,
age : PropType.oneOf(['string','number']),
isChecked : PropType.bool
}
export default MyComponent;