goal
- Component의 모든 것
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
-------------------------------------------
// App.js
import React, { Component } from 'react';
import TodaysPlan from "./03/TodaysPlan"; // 작성된 컴포넌트(TodaysPlan Component) 불러오기(import하기)
class App extends Component {
render() {
return (
<div>
<div className = "body">
<TodaysPlan/> // 컴포넌트를 JSX 안에 마크업 형식으로 추가
</div>
<img src = "https://cdn.ftoday.co.kr/news/photo/201302/13868_15545_3126.jpg"/>
</div>
);
}
}
export default App;
-------------------------------------------
// TodaysPlan.jsx
import React, { Component } from 'react';
class TodaysPlan extends Component { // 컴포넌트명은 대문자로
render() {
return (
<div className = "message-container">
<ol>
<li>윌리와 산책하기</li>
<li>리액트 공부하기</li>
<li>운동하기</li>
</ol>
</div>
);
}
}
export default TodaysPlan;
- 상위 컴포넌트가 하위 컴포넌트에 값을 전달할 때 사용한다.
- property 값은 수정할 수 없다.
prop-types
(리액트에서 제공)를 이용한다.// App.js
<PropsComponent name = "Before Sunset is ..." />
// render() 내부에
// 다음과 같은 형식으로 속성을 가져온다.
// name 속성으로 받은 문자열을 출력한다.
----------------------------
// PropsComponent.jsx
import React from "react";
import PropTypes from "prop-types"; // prop-types 라이브러리를 import
class PropsComponent extends React.Component {
// in this PropsComponent 컴포넌트에서는
// name 이라는 이름의 프로퍼티로 전달받은 "Before Sunset ..." 이라는 문자열 값을
// render() 함수에서 참조할 수 있다.
// render() 함수에서 this.props.name 으로 property값을 참조하고 있다.
render() {
return (
<div className = "message-container">
{this.props.name}
</div>
);
}
}
// 자료형을 선언하는 예제
PropsComponent.propTypes = {name : PropTypes.string,}
// PropsComponent의 propTypes라는 특수한 변수를 사용해서 프로퍼티의 자료형을 정의함
// 프로퍼티의 자료형을 객체 형태로 지정해서, PropsComponent.propTypes에 저장함
export default PropsComponent;