일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 라이프사이클
- propsTypes
- 2021 정처기
- 2021 정보처리기사
- 정처기
- defaultProps
- 2021 정처기 실기
- 정보처리기사
- Vue.js 입문
- router go
- router push
- 2021 정보처리기사 실기
- vue 히스토리 모드
- vuex 새로고침
- 컴포넌트
- router 네비게이션
- router replace
- 함수형 컴포넌트
- Vue.js 시작하기
- 클래스형 컴포넌트
- React
- 중첩 라우트
- vue 로그인
- vuex
- vue.js 로그인
- Props
- React 시작하기
- State
- 백준 1110 시간 초과
- vue.js
- Today
- Total
개발 일기
[React 시작하기] 컴포넌트 (props) 본문
react의 컴포넌트는 함수형 컴포넌트, 클래스형 컴포넌트 두가지로 나눌 수 있다.
import React from 'react'
import './App.css'
function App() {
const framework = "리액트";
return <div className="App">{framework}</div>;
}
export default App;
함수형
import React, { Component } from "react";
class App extends Component {
render() {
const framework = "리액트";
return <div className="react">{framework}</div>;
}
}
export default App;
클래스형
함수형 컴포넌트와 클래스형 컴포넌트의 차이점은 클래스형 컴포넌트에서 state 기능 및 라이프사이클 기능을 사용할 수 있다는 점과 임의 메서드를 정의할 수 있다는 점이다.
하지만 함수형 컴포넌트는 선언하기에 더 쉽고 메모리 자원도 클래스형 컴포넌트보다 덜 사용한다. 주요 단점은 state와 라이프사이클 메서드의 사용이 불가능하다는 점이었지만 Hooks 가 도입되면서 해결되었다.
앞으로 함수형 컴포넌트를 위주로 포스팅하겠다.
컴포넌트 생성
src/FirstComponent.js
import React from "react";
const Firstcomponent = () => {
return <div>첫번째 컴포넌트입니다.</div>;
};
export default Firstcomponent;
src/App.js
import React from "react";
import FirstComponent from "./FirstComponent";
const App = () => {
return <FirstComponent />;
};
export default App;
서버를 돌리면 컴포넌트가 생성된 것을 확인할 수 있다.
Props
props를 사용해서 부모 컴포넌트에서 설정한 속성을 받아서 사용할 수 있다.
src/App.js
import React from "react";
import FirstComponent from "./FirstComponent";
const App = () => {
return <FirstComponent name="리액트" />;
};
export default App;
부모 컴포넌트에서 이름이 name인 props를 줬다.
src/FirstComponent.js
import React from "react";
const Firstcomponent = (props) => {
return <div>첫번째 {props.name} 컴포넌트입니다.</div>;
};
export default Firstcomponent;
props를 인자로 받아와서 그 안에 name을 뽑아 사용하는 걸 볼 수 있다.
만약 부모-> 자식 컴포넌트로 props 값을 주지않을 때를 대비해서 defaultProps를 사용하여 기본 값을 설정할 수도 있다.
src/FirstComponent.js
import React from "react";
const Firstcomponent = (props) => {
return <div>첫번째 {props.name} 컴포넌트입니다.</div>;
};
Firstcomponent.defaultProps = {
name: "props 없을 때 name",
};
export default Firstcomponent;
children props를 사용해서 컴포넌트 태그 사이의 내용을 보여줄 수도 있다. (대신 self-closing 태그는 불가)
src/App.js
import React from "react";
import FirstComponent from "./FirstComponent";
const App = () => {
return <FirstComponent>리액트</FirstComponent>;
};
export default App;
src/Firstcomponent.js
import React from "react";
const Firstcomponent = (props) => {
return (
<div>
<h1>첫번째 {props.name} 컴포넌트입니다.</h1>
<h3>childeren 값 : {props.children}</h3>
</div>
);
};
Firstcomponent.defaultProps = {
name: "props 없을 때 name",
};
export default Firstcomponent;
이 상태로 가게되면 props의 값이 많아질 때 떨어지는 가독성과 긴 코드를 선보일 수 있게 된다,,ㅋㅋ
이때 비구조화 할당 문법을 사용하면 간결하게 코드를 작성할 수 있다. b
src/Firstcomponent.js
import React from "react";
const Firstcomponent = (props) => {
const { name, children } = props;
return (
<div>
<h1>첫번째 {name} 컴포넌트입니다.</h1>
<h3>childeren 값 : {children}</h3>
</div>
);
};
Firstcomponent.defaultProps = {
name: "props 없을 때 name",
};
export default Firstcomponent;
추가로, propsTypes를 사용하여 필수 props를 지정하고나 타입을 지정할 수 있다.
src/Firstcomponent.js
import React from "react";
import PropTypes from "prop-types";
const Firstcomponent = (props) => {
const { name, children } = props;
return (
<div>
<h1>첫번째 {name} 컴포넌트입니다.</h1>
<h3>childeren 값 : {children}</h3>
</div>
);
};
Firstcomponent.defaultProps = {
name: 3,
};
Firstcomponent.propTypes = {
name: PropTypes.string.isRequired,
};
export default Firstcomponent;
만약 부모 컴포넌트에서 string 이 아닌 props를 주게 되면 화면에는 보이지만 콘솔에 에러가 나는 것을 볼 수 있다.
또한 props를 주지 않았을 때도 콘솔에 에러가 난다.
'React' 카테고리의 다른 글
[React 시작하기] JSX (0) | 2021.06.17 |
---|---|
[React 시작하기] 개발 환경 설정 (0) | 2021.06.17 |