Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

COCSOS - guitar, computer, etc

211222 리액트 PropTypes 본문

Computer/react

211222 리액트 PropTypes

COCSOS 2021. 12. 22. 01:14

* PropTypes에서 속성값 타입을 입력할 수 있다
는것은 무슨 소리란 말이요?

import PropTypes from 'prop-types';


User.propTypes = {...};
// prop-types 패키지가 있다.
속성값의 타입정보를 정의할 때 사용하는 리액트 공식 패키지


왜 타입이 필요한가?

js는 동적 타입, 실수 등 에러 발생 가능하기 때문.

아래를 보고 한눈에 무슨 타입인지 알고, 코딩할 때 실수안할걸 확신하면 동적 타입 쓰셈.

 

// propTypes가 없는 경우

/**
 * 
 * 코드를 읽어야 타입을 알 수 있다
 * 그러나 읽고나서도 명확하지 않음
 */
export default function User({type,age,male,onChangeName,onChangeTitle}){

	/**
	 * type이 문자열인것가고
	 * age는 무슨 타입인지 잘 모르겠음
	 * male도 잘 모르겠음
	 */
	function onClick(){
			const msg = `type: ${type}, age : ${age ? age : '알 수 없음'}`;
			log(msg, {colos: type==='gold'? 'red':'black'});
			//..
	}

	/**
	 * onChangeName은 함수인데 null일수도 있는것같음
	 */
	function onClick2(name, title){
		if (onChangeName){
			onChangeName(name);
		}
		onChangeTitle(title);
		male ? goMalePage(): goFemalePage();
		///...
	}
	//...
	return null;
}

 


* PropTypes.element ? 요소타입 
<div>hello</div> 참
<Profile /> 참
123 에러

* PropTypes.node
컴포넌트 함수가 반환하는 모든 것

* PropTypes.oneOf(['a','b'])
값이 이중 하나

*PropTypes.oneOfType(['a','b'])
타입이 이중 하나

* PropTypes.arrayOf(PropTypes.XXX)
PropTypes.XXX 타입으로만 이뤄진 배열

* PropTypes.shape({...})
객체를 통으로 타입 정의

* PropTypes.objectOf(PropTypes.number)
객체의 모든 속성값 타입이 같을때

+ 인자의 범위도 제한할 수 있다

 

 

import PropTypes from 'prop-types';

User.propTypes = {
	// 타입 체크
	male : PropTypes.bool.isRequired,
	age: PropTypes.number,
	type: PropTypes.oneOf(['gold', 'silver', 'bronze']),
	onChangeName : PropTypes.func,
	onChangeTitle : PropTypes.func.isRequired,

	// 인자 체크
	customCondition: function (props,propName,componentName){
		const value = props[propName];
		if (value < 10 || value > 20){
			return new Error(
				`NOT IN 10 <= ${value} <= 20 FROM ${componentName}`
			)
		}
	}
};

export default function User({type, age, male, onChangeName, onChangeTitle}){

	function onClick(){
		const msg = `type : ${type}, age: ${age ? age : '알 수 없음'}`
		console.log(msg, {color : type === 'gold' ? 'red' : 'black'});

		//...
	}

	function onClick2(name, title){
		if (onChangeName){
			onChangeName(name);
		}

		onChangeTitle(title);
		male ? goMalePage() : goFemalePage();
	}
	return null;
}

function goMalePage(){}
function goFemalePage(){}

'Computer > react' 카테고리의 다른 글

220814 실전 자바스크립트 1  (0) 2022.08.14
211222 리액트 조건부 렌더링  (0) 2021.12.22
211221 리액트 컴포넌트 작성  (0) 2021.12.21
211218 리액트 다른 훅  (0) 2021.12.18
211218 리액트 ref 속성  (0) 2021.12.18
Comments