몽땅뚝딱 개발자

[React] 클래스형 컴포넌트 - Props / 자료형 선언 / 필수값과 기본값 지정 본문

Development/React.js · Next.js

[React] 클래스형 컴포넌트 - Props / 자료형 선언 / 필수값과 기본값 지정

레오나르도 다빈츠 2022. 8. 20. 15:49

 

 

 

드뎌.. 리액트 공부 다시 시작..! 🥺

 

 


 

 

◽ Props

데이터를 수정해야할 경우 props 자체가 아닌 컴포넌트 내부 변수(예제에서는 "props_value"라는 변수)에 옮겨 가공한다.

import React from "react";
import './App.css';
import ChildComp from './ChildComp'

function App() {
  return (
   // JSX
   <div>
     <h1>Start React</h1>
     <ChildComp test_value="this is props" />
   </div>
  );
}

export default App;

 

import React, { Component } from "react";

class ChildComp extends Component {
  render() {
    // props 인자 받아오기
    let props_value = this.props.test_value;
    props_value += ' from App.js'
    return (
        <div>
          { props_value }
        </div>
    );
  }
}

export default ChildComp

 

 

 

 

 


 

 

 

 

타입스크립트처럼 자료형도 지정할 수 있었다.

npm install --save prop-types
 

prop-types

Runtime type checking for React props and similar objects.. Latest version: 15.8.1, last published: 8 months ago. Start using prop-types in your project by running `npm i prop-types`. There are 50607 other projects in the npm registry using prop-types.

www.npmjs.com

 

 

◽ Props 자료형 선언

import React from "react";
import './App.css';
import ChildComp from './ChildComp'

function App() {
  return (
   <div>
     <h1>Start React</h1>
     <ChildComp
      val_string="string"
      val_number={100}
      val_boolean={true}
      val_array={[0, 1, 2]}
      val_object={{react: '리액트'}}
      val_function={console.log("테스트")}
     />
   </div>
  );
}

export default App;
import React, { Component } from "react";
import datatype from 'prop-types'

class ChildComp extends Component {
  render() {
    console.log(this.props);
    let {
      val_string, val_number, val_boolean, val_array, val_object, val_function
    } = this.props

    return (
        <div style={{ padding: '20px' }}>
          <p>val_string: {val_string}</p>
          <p>val_number: {val_number}</p>
          <p>val_boolean: {val_boolean.toString()}</p>
          <p>val_array: {val_array.toString()}</p>
          <p>val_object: {JSON.stringify(val_object)}</p>
          <p>val_function: {val_function}</p>
        </div>
    );
  }
}

// props의 자료형을 각각 지정해 줄 수 있다.
ChildComp.propTypes = {
  val_string: datatype.string,
  val_number: datatype.number,
  val_boolean: datatype.bool,
  val_array: datatype.array,
  val_object: datatype.object,
  val_function: datatype.func,
}

export default ChildComp

 

 

 

 


 

 

 

 

Prop 필수값으로 지정하기

변수 뒤에 isRequired를 붙여준다.

ChildComp.propTypes = {
  val_required: datatype.number.isRequired,
}

 


 Prop 기본값 지정하기

ChildComp.defaultProps = {
  val_number: 0,
}

 

 

 


 

 

 

Vue.js의 slot 처럼 노드를 전달할 수도 있다.

this.props.children로 접근한다.

import React from "react";
import './App.css';
import ChildComp from './ChildComp'

function App() {
  return (
   <div>
     <h1>React</h1>
     <ChildComp>
       <span>안녕!</span>
     </ChildComp>
   </div>
  );
}

export default App;
import React, { Component } from "react";

class ChildComp extends Component {
  render() {
    return (
        <div style={{ padding: '20px' }}>
          {this.props.children}
        </div>
    );
  }
}

export default ChildComp

 

 

 

 

 


 

출처

이정열, 초보자를 위한 리액트 200제 (정보문화사, 2021)

 

 

Comments