본문 바로가기
REACT

REACT - props

by Kimjoy 2023. 8. 8.

props는 properties를 줄인 표현으로 컴포넌트의 속성을 설정할 때 사용하는 요소이다.

props값은 해당 컴포넌트를 불러와 사용하는 부모 컴포넌트(App 컴포넌트가 부모 컴포넌트)에 설정할 수 있다.

 

1. JSX 내부에서 props 랜더링

props 값은 컴포넌트 함수의 파라미터로 받아와서 사용할 수 있다. props를 랜더링할 때 JSX 내부에서 {} 로 감싸 주면 된다.

const MyComponent = (props) => {
	return <div>안녕하세요 저의 이름은 {props.name}입니다. </div>;
    };
    
    export default MyComponent;

 

2. 컴포넌트를 사용할 때 props 값 지정하기

import MyComponent from './MyComponent';

const App = () => {
	return <MyComponent name="홍길동" />;
    };
    
    export default App;

 

3. props의 기본값 설정 : defaultProps

const MyComponent = (props) => {
	return <div>안녕하세요. 저의 이름은 {props.name}입니다.</div>;
    };
    
    MyComponent.defaultProps = {
    	name : '기본 이름'.
        };
        
        export default MyComponent;
import MyComponent from './MyComponent';

const App = () => {
	return <MyComponent />;
    };
    
    export default App;

 

4. 태그 사이의 내용을 보여주는 children

children은 리액트 컴포넌트를 사용할 때 컴포넌트 태그 사이의 내용을 보여주는 props이다.

import MyComponent from './MyComponent';

const App = () => {
	return <MyComponent>리액트</MyComponent>;
    };
    
    export default App;
const MyComponent = (props) => {
	return(
    	<div>
        안녕하세요. 저의 이름은 {props.name}입니다.<br />
        children 값은 {props.children}입니다.
        </div>
        );
    };
    
    MyComponent.defaultProps = {
    	name : '기본 이름',
        };
        
        export default MyComponent;

 

5. 비구조화 할당 문법을 통해 props 내부 값 추출하기

비구조화 할당 문법(구조 분해 문법)

객체에서 값을 추출하는 문법으로, 함수의 파라미터 부분에서도 사용할 수 있다. 

만약 함수의 파라미터가 객체라면 그 값을 바로 비구조화해서 사용하는 것이다.

const MyComponent = (props) => {
	const { name, children } = props;	//비구조화 할당
    return (
    <div>
    안녕하세요 제 이름은 {name} 입니다. <br />
    children 값은 {children}입니다.
    </div>
    );
 };
 
 MyComponent.defaultProps = {
 	name : '기본 이름',
    };
    
    export default MyComponent;
const MyComponent = ({ name, children }) => {
	return (
    	<div>
        안녕하세요, 제 이름은 {name}입니다. <br />
        children 값은 {children}입니다.
        </div>
        );
     };
     
MyComponent.defaultProps = {
 	name : '기본 이름',
    };
    
    export default MyComponent;

=> 이렇게 비구조 할당 문법을 사용하면 name과 children 값을 더 짧은 코드로 사용할 수 있다. 

 

6. propTypes를 통한 props 검증

컴포넌트의 필수 props를 지정하거나 props의 타입을 지정할 때는 propTypes를 사용한다.

컴포넌트의 propTypes를 지정하는 방법은 defaultProps을 설정하는 것과 비슷하다.  

import PropTypes from 'prop-types';

const MyComponent = ({ name, children }) => {
    return (
        <div>
            안녕하세요, 제 이름은 {name} 입니다. <br />
            children 값은 {children} 입니다.
        </div>
    )
}

MyComponent.defaultProps = {
    name: '기본 이름',
};

MyComponent.PropTypes = {
    name : PropTypes.string
}

export default MyComponent;

코드 상단에 propTypes를 import해 주고, MyComponent.propTypes를 설정한다.

이렇게 설정하면 name값은 무조건 문자열 형태로 전달해야 된다는 것을 의미하는데, 

App 컴포넌트(부모 컴포넌트)에서 name값을 문자열이 아닌 숫자로 전달한 뒤 개발자 도구의 콘솔을 확인하면 

에러가 보이는 것을 확인할 수 있다. 

 

7. isRequired를 사용한 필수 propTypes 속성

필수 항목을 설정하는 속성이다.

import PropTypes from 'prop-types';
const MyComponent = ({name, favoriteNumber, children}) => {
    return (
        <div>
             안녕하세요, 제 이름은 {name}입니다.
             children 값은 {children}입니다 <br />
             제가 좋아하는 숫자는 {favoriteNumber}입니다.
        </div>
    );
};

MyComponent.defaultProps = {
    name: '기본 이름',
};

MyComponent.propTypes = {
    name : PropTypes.string,
    favoriteNumber : PropTypes.number.isRequired
}

export default MyComponent;

 

8. 클래스 컴포넌트에서 props 사용하기

클래스 컴포넌트에서 props를 사용할 때는 render() 함수에서 this.props를 조회하면 된다.

그리고 defaultProps와 propTypes는 그대로 사용할 수 있다.

클래스 컴포넌트에서는 defaultProps와 propTypes를 클래스 내부에서 지정하는 방법도 있다. 

import React, {Component} from 'react';
import PropTypes from 'prop-types';

class MyComponent extends Component {
    static defaultProps = {
        name : '기본 이름'
    };
    static PropTypes = {
        name : PropTypes.string,
        favoriteNumber: PropTypes.number.isRequired
    };
    render() {
        const { name, favoriteNumber, children } = this.props;  //비구조화 할당
        return (
            <div>
                안녕하세요, 제 이름은 {name} 입니다. <br />
                children 값은 {children} 
                입니다.
                <br />
                제가 좋아하는 숫자는 {favoriteNumber}
            </div>
        )
    }
}

 

'REACT' 카테고리의 다른 글

REACT-이벤트  (1) 2023.08.09
REACT - state  (0) 2023.08.08
REACT-컴포넌트  (1) 2023.08.08
REACT- REACT 소개 + JSX 문법  (1) 2023.08.08
react - 익명함수  (1) 2023.08.04