React.JS) 2. Create React App 사용하기

송민경's avatar
Sep 22, 2024
React.JS) 2. Create React App 사용하기

1. Create React App(CRA)

  • React 애플리케이션을 쉽게 설정하고 시작할 수 있도록 도와주는 도구
  • 복잡한 설정 없이 기본적인 React 프로젝트 구조를 자동으로 생성해줌
  • 기능
    • 초기 설정 자동화: Babel, Webpack 등의 설정을 자동으로 구성
    • 개발 서버 제공npm start 명령어로 즉시 로컬 개발 서버 실행
    • 최적화된 빌드npm run build를 사용하여 배포에 적합한 정적 파일을 쉽게 생성
    • 유효성 검사 및 테스트: Jest와 React Testing Library가 내장 → 쉽게 테스트를 작성, 실행
    • 환경 변수 지원.env 파일을 사용하여 환경 변수를 설정
 

2. 초기 코드

  • index.js
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <React.StrictMode> <App /> </React.StrictMode> );
  • app.js
function App() { return ( <div> <h1>Welcome React.JS</h1> </div> ); } export default App;
  • src 내부에 아래 두 파일 외 지우기
notion image
notion image
 

3. 버튼 만들기

  • Button.js 만들기
function Button({text}){ return <button>{text}</button>; } export default Button;
notion image
  • import하고 사용하지 않으면 에러가 떠서 알려줌
import Button from "./Button"; function App() { return ( <div> <h1>Welcome React.JS</h1> </div> ); } export default App;
notion image
  • Button 사용하기
import Button from "./Button"; function App() { return ( <div> <h1>Welcome React.JS</h1> <Button text={"계속"} /> </div> ); } export default App;
notion image
 

4. Props Type 설치하기

npm i prop-types
notion image
 

5. PropTypes 적용하기

  • Button.js
import PropTypes from "prop-types"; function Button({text}){ return <button>{text}</button>; } Button.propTypes = { text: PropTypes.string.isRequired, } export default Button;
 

6. style.css 파일로 적용하기

  • style.css 만들기
    • notion image
      button { color: white; background-color: orange; }
    • index.js에 적용하기
    • import React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; import"./style.css"; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <React.StrictMode> <App /> </React.StrictMode> );
      notion image
  • style.css 파일 삭제하고 적용하기
import PropTypes from "prop-types"; function Button({text}){ return <button style={{ backgroundColor: "orange", color: "white" }}>{text}</button>; } Button.propTypes = { text: PropTypes.string.isRequired, } export default Button;
notion image
 

7. Button.module.css 만들기

  • CRA의 분할과 정복을 이용하기
.btn { color: white; background-color: orange; }
notion image
  • Button.js
import PropTypes from "prop-types"; import styles from "./Button.module.css"; function Button({ text }) { return <button className={styles.btn}>{text}</button>; } Button.propTypes = { text: PropTypes.string.isRequired, }; export default Button;
notion image
 

8. App.module.css 만들기

.title { font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: 18px; }
  • App.js
import Button from "./Button"; import styles from "./App.module.css"; function App() { return ( <div> <h1 className={styles.title}>Welcome React.JS</h1> <Button text={"계속"} /> </div> ); } export default App;
notion image
Share article

vosw1