ch05-component
생성하고 구동ch05-component
선택하고 src
폴더에 새 파일 MyComponent.js
생성import React from "react";
// props 값은 컴포넌트 함수의 파라미터로 받아와서 사용할 수 있음
/*
const MyComponent = (props) => {
return <div>안녕하세요, {props.name}를 배우고 있습니다.</div>
}
*/
// 태그 사이의 내용을 보여주는 children
// JSX에서는 단독 태그라도 /로 닫아야 함
const MyComponent = (props) => {
return (
<div>
안녕하세요, 제 이름은 {props.name}입니다.
<br/>
children 값은 {props.children}입니다.
</div>
);
}
// props 값을 따로 지정하지 않았을 때 보여줄 기본값을 설정하는 defaultProps
MyComponent.defaultProps = {
name:'Spring Boot'
}
export default MyComponent;
App.js
를 다음처럼 수정import React from "react";
import MyComponent from "./MyComponent";
/*
function App() {
return <MyComponent name="react" />;
}
*/
// props 값을 따로 지정하지 않았을 때 보여줄 기본값을 설정하는 defaultProps
/*
function App() {
return <MyComponent />;
}
*/
// 태그 사이의 내용을 보여주는 children
const App = () => {
return <MyComponent>리액트</MyComponent>;
}
export default App;
ch06-component
생성하고 구동ch06-component
선택하고 src
폴더에 새 파일 MyComponent.js
생성import React from 'react';
import PropTypes from 'prop-types';
// 구조 분해 할당 문법(=객체에서 값을 추출하는 문법)을 통해 props 내부 값 추출하기
/*
const MyComponent = (props) => {
// 구조 분해 할당
const {name, children} = props;
// const name = props.name;
// const children = props.children;
return (
<div>
안녕하세요, 제 이름은 {name}입니다.
<br/>
children 값은 {children}입니다.
</div>
);
}
*/
// 함수 파라미터가 객체라면 그 값을 바로 구조 분해 할당할 수 있음
const MyComponent = ({name, children}) => {
return (
<div>
안녕하세요, 제 이름은 {name}입니다.
<br/>
children 값은 {children}입니다.
</div>
);
}
// PropTypes를 통한 props 검증
// name값은 문자열(string)로 전달
// 숫자로 전달시 화면상 오류는 없지만 콘솔에 경고 출력
MyComponent.propTypes = {
name: PropTypes.string
}
export default MyComponent;
App.js
를 다음처럼 수정import React from "react";
import MyComponent from "./MyComponent";
/*
function App() {
return <MyComponent name="Web Service">리액트</MyComponent>;
}
*/
// 숫자를 전달하면 콘솔에 경고 출력하여 propTypes가 잘못되었음을 알림
const App = () => {
return <MyComponent name={1234}>React</MyComponent>;
}
export default App;
index.js
를 다음처럼 수정(React 18의 변경 사항 반영)import React from 'react';
import {createRoot} from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
const container = document.getElementById('root');
const root = createRoot(container);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>,
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();