src/Mycomponent.js 만들기
import React from "react";
const MyComponent = () =>{
return <div>나의 새롭고 멋진 컴포넌트</div>
};
export default MyComponent;
모듈 내보기(export)
export default MyComponent;
모듈 불러오기(import)
import React, { Component } from 'react';
import MyComponent from './MyComponent';
class App extends Component {
render() {
return (
<div >
<MyComponent/>
</div>
);
}
}
export default App;
Props
props는 properties를 줄인 표현
컴포넌트 속성을 설정할 때 사용하는 요소
props 값은 해당 컴포넌트를 불러와 사용하는 부모 컴포넌트
(현 상황에서는 App 컴포넌트가 부모 컴포넌트입니다)에서 설정
Jsx 내부에서 props 렌더링
MyComponent.js
import React from "react";
const MyComponent = props =>{
return <div>안녕하세요 제 이름 {props.name}입니다.</div>
};
export default MyComponent;
App.js
import React, { Component } from 'react';
import MyComponent from './MyComponent';
class App extends Component {
render() {
return (
<div >
<MyComponent name="React"/>
</div>
);
}
}
export default App;
defaultProps
import React from "react";
const MyComponent = props =>{
return <div>안녕하세요 제 이름 {props.name}입니다.</div>
};
MyComponent.defaultProps={
name:'기본이름'
};
export default MyComponent;
태그 사이의 내용을 보여주는 children
태그 사이의 내용을 보여주는 props children
Mycomponent.js
import React from "react";
const MyComponent = props =>{
return (
<div>
안녕하세요 제 이름 {props.name}입니다. <br/>
children 값은 {props.children} 입니다.
</div>
)
};
MyComponent.defaultProps={
name:'기본이름'
};
export default MyComponent;
비구조화 할당 문법
구조 분해 문법이라고도 불리며, 함수의 파라미터 부분에서도 사용할 수 있다.
Mycomponent.js
import React from "react";
const MyComponent = props =>{
const {name,children} = props;
return (
<div>
안녕하세요 제 이름 {name}입니다. <br/>
children 값은 {children} 입니다.
</div>
)
};
MyComponent.defaultProps={
name:'기본이름'
};
export default MyComponent;
Mycomponent.js
import React from "react";
const MyComponent = ({name,children}) =>{
return (
<div>
안녕하세요 제 이름 {name}입니다. <br/>
children 값은 {children} 입니다.
</div>
)
};
MyComponent.defaultProps={
name:'기본이름'
};
export default MyComponent;
propTypes를 통한 props 검증
propTypes를 사용하려면 코드 상단에 import 구문을 사용
name 값은 무조건 문자열(string) 형태로 전달해야 된다
MyComponent.prototype ={
name:PropTypes.string
}
isRequired를 사용하여 필수 propTypes 설정
proptypes를 지정하지 않았을때 경고 메시지 띄우기
import React from "react";
import PropTypes from'prop-types';
const MyComponent = ({name,favoriteNumber,children}) =>{
return (
<div>
안녕하세요 제 이름 {name}입니다. <br/>
children 값은 {children} 입니다.
<br/>
제가 좋아하는 숫자는 {favoriteNumber}입니다.
</div>
)
};
MyComponent.defaultProps={
name:'기본이름'
};
MyComponent.prototype ={
name:PropTypes.string,
favoriteNumber:PropTypes.number.isRequired
}
export default MyComponent;
App.js
import React, { Component } from 'react';
import MyComponent from './MyComponent';
class App extends Component {
render() {
return (
<div >
<MyComponent name="React" favoriteNumber={1}>리액트</MyComponent>
</div>
);
}
}
export default App;
PropTypes 종류
array: 배열
arrayOf(다른 PropType): 특정 PropType으로 이루어진 배열을 의미
bool: true 혹은 false 값
func: 함수
number:숫자
object:객체string:문자열symbol: ES6의 Symbolnode:렌더링 할 수 있는 모든 것(숫자, 문자열, 혹은 jsx 코드 children도 node PropType입니다)
instanceOf(클래스): 특정 클래스의 인스턴스
oneOf:주어진 배열 요소 중 값 하나
oneOfType([React.PropTypes.string,PropTypes.number]):주어진 배열 안의 종류 중 하나
obejctOf(React.PropTypes.number): 객체의 모든 키 값이 인자로 주어진 PropType인 객체
shape({name:PropTypes.string,num:PropTypes.number}):주어진 스키마를 가진 객체any: 아무 종류
클래스형 컴포넌트에서 Props 사용하기
클래스형 컴포넌트에서 props를 사용할 때는 render 함수에서 this.props를 조회하면 됨.
그리고 defaultProps와 propsTypes는 똑같은 방식
import React, { Component } from 'react';
import ProTypes from 'prop-types';
class MyComponent extends Component {
static defaultProps ={
name:'기본 이름'
};
static ProTypes = {
name:ProTypes.string,
favoriteNumber:ProTypes.number.isRequired
}
render() {
const {name,favoriteNumber,children} = this.props; //비구조화 할당
return (
<div>
안녕하세요 제 이름 {name}입니다. <br/>
children 값은 {children} 입니다.
<br/>
제가 좋아하는 숫자는 {favoriteNumber}입니다.
</div>
);
}
}
MyComponent.defaultProps={
name:'기본이름'
};
export default MyComponent;
'React' 카테고리의 다른 글
React event handling (0) | 2021.10.27 |
---|---|
React state, hooks UseState (0) | 2021.10.26 |
react redux알아보기 (0) | 2021.10.21 |
react 이벤트 사용하기 (0) | 2021.10.20 |
react axios 라이브러리 get과 post 방식 (0) | 2021.10.20 |