본문 바로가기

Programming/국비학원

220729 - React - 환경 구축

리액트

서브페이지 X 싱글페이지 O (SPA)
프로젝트 단위로 프로그램 구축

 

component
사용자 정의 태그 (이름, 속성 모두 개발자가 명명)
리액트의 최소 단위 
클래스와 함수로 나뉨

 

 

※프레임워크, 라이브러리 차이

https://canoe726.tistory.com/23

 

React 는 왜 프레임워크가 아니라 라이브러리일까?

React에 관한 글을 작성하다가 React는 왜 라이브러리일까? 그리고 프레임워크와 라이브러리의 차이점은 무엇일까? 에 대한 해답을 얻기위해 포스팅을 작성하게 되었습니다. 1. React 는 프레임워크

canoe726.tistory.com

 

 

※리액트, 리액트 네이티브

https://zeddios.tistory.com/409

 

리액트? 리액트 네이티브??

안녕하세요 :) Zedd입니다. 웹을 하시는 분들이라면 "리액트"라는 단어는 무조건 들어보셨을 것 같은데.. 저는 잘 몰라서 정리를 하려고 합니다. 정리하는 김에 리액트 네이티브까지 ㅇㅇ ● 리액

zeddios.tistory.com

 

 

NPM (Node Package Manager) : 리액트 등 앱들을 적절한 환경에 설치 지원 
=> NPM 있어야 리액트 설치 가능

 


※Node js
javascript로 서버 구축, 서버에서 JavaScript가 작동되도록 해주는 런타임 환경(플랫폼)

 

https://ninjaggobugi.tistory.com/7

 

[NODE 강의] Node.js 란?

[클립명] 1. 자바스크립트란? 2. nodejs란? 3. nodejs설치  Node.js 라는 것을 들어본지는 벌써 몇 년 전이다. 하지만 Node.js에 대해 공부해본 적이 없었기 때문에 막연하게나마 '자바스크립트로 데이터베

ninjaggobugi.tistory.com

 


※앱 
웹앱 : 브라우저 통해 구현되는 앱 ex.웹페이지
네이티브앱: 폰에 설치해서 구동되는 앱 ex.일반 스마트폰 앱
하이브리드앱: html,css,js로 제작, 설치 및 구현은 앱처럼 ex.11번가 등 쇼핑몰앱

 

 

 

  • 리액트 설치

1. nodejs.org

최신X 안정적 버전O 다운로드

 

2. cmd

npm -v  
npm install -g create-react-app (g: global, 어디서나 실행)

 

 

 

  • 개발 환경 구축

1. cmd

cd 리액트설치할폴더명

create-react-app . => 현재 폴더에 리액트 개발환경 구축

 

2. 비주얼 스튜디오

보기 - 터미널 표시

터미널 - npm run start => 서버 오픈

터미널 - ctrl + c 입력 후 y 입력 => 서버 종료

 

3. 크롬 웹스토어

react developer tools 설치

-> 컴포넌트 확인 가능

 

 

 

  • 리액트 이용해 간단한 웹페이지 구현

App.js => export
index.js => App import, index.html의 root  요소와 연결

 

연결/구현 이해 참고:

https://mjn5027.tistory.com/21

 

[ React ] 리액트 화면 띄워보기

이번 게시글에선 리액트를 사용해 화면을 띄워보는 내용을 다룰 것이다. ​ 저번 게시글에서 만든 hello-react 프로젝트를 코드에디터 프로그램으로 열어보자. 필자는 VisualCode 사용. ​ ​ 다음과

mjn5027.tistory.com

 

 

  • App.js

import { Component } from 'react';
import './App.css';

class App extends Component{
  render(){ //render: export 도움
    return (
      <div> //가장 외곽은 wrapper 역할하는 태그 하나로 감싸져 있어야 함 (여러 태그 각자 존재 불가)
        <h1>리엑트 홈페이지</h1>  
        <p>"안녕하세요!"</p>
      </div>
      );
  }
}

export default App;

 

 

  • index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App'; //이름 변경 가능(App)
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(document.getElementById('root')); //index.html의 #root 영역을 찾아 변수에 전달
root.render(   //root에 컴포넌트 보여줌
  <React.StrictMode>
    <App />  //이름 변경 가능
  </React.StrictMode>
);

reportWebVitals();

 

 

  • index.css

body{
  background-color: rgb(197, 238, 238);
}
.title{
  color: white;
}

 

 

  • index.html

  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
  </body>

 

 

 

  • 컴포넌트 생성
  • cf. 리액트 이용 안 한 웹페이지

<body>
    <header>
        <h1>웹 카페</h1>
        <p>웹에 대해 알아봅시다</p>
    </header>
    <nav>
        <ul>
            <li><a href="html5.html">HTML5에 대해</a></li>             
            <li><a href="css3.html">CSS3의 모든 것</a></li>
            <li><a href="js.html">JAVASCRIPT란?</a></li>
        </ul>
    </nav>
    <article>
        <h2>HTML5에 대해</h2>
        <p>홈페이지의 뼈대를 말한다</p>
    </article>
</body>

 

 

=> 리액트로 바꾸기 (세 컴포넌트)

 

  • App.js

import { Component } from 'react';
import './App.css';

class Subject extends Component //컴포넌트 생성
  render(){
    return(
      <header>
        <h1>웹 카페</h1>
        <p>웹에 대해 알아봅시다</p>
      </header>

    );
  }
}

class TOC extends Component{
  render(){
    return(
      <nav>
        <ul>
            <li><a href="html5.html">HTML5에 대해</a></li> 
            <li><a href="css3.html">CSS3의 모든 것</a></li>
            <li><a href="js.html">JAVASCRIPT란?</a></li>
        </ul>
      </nav>
    );
  }
}

class Content extends Component{
  render(){
    return(
      <article>
        <h2>HTML5에 대해</h2>
        <p>홈페이지의 뼈대를 말한다</p>
      </article>
    );
  }
}

class App extends Component{
  render(){ //render: export 도움
    return ( //제작한 컴포넌트 넣기
      <div className='App'> 
        <Subject></Subject> //html 아님 (콘솔 입력 시 오류로 인식)
        <TOC></TOC>
        <Content></Content>
      </div>
      );
  }
}

export default App;

 

 

 

  • 앱 배포 방법

1.터미널

npm run build => build 폴더 생성됨
2. 배포용 리액트 페이지 실행

 


※ npx serve -s build
주소 알려줌
(cmd : npm install -g serve 미리 해야 함) 

 

 

  • props (속성) 생성
  • App.js

import { Component } from 'react';
import './App.css';

class Subject extends Component{
  render(){
    return(
      <header>
        <h1>{this.props.title}</h1> 
        <p>{this.props.sub}</p> 
      </header>
    );
  }
}

class TOC extends Component{
  render(){
    return(
      <nav>
        <ul>
            <li><a href="html5.html">HTML5에 대해</a></li> 
            <li><a href="css3.html">CSS3의 모든 것</a></li>
            <li><a href="js.html">JAVASCRIPT란?</a></li>
        </ul>
      </nav>
    );
  }
}

class Content extends Component{
  render(){
    return(
      <article>
        <h2>{this.props.title}</h2>
        <p>{this.props.desc}</p>
      </article>
    );
  }
}

class App extends Component{
  render(){ //render: export 도움
    return ( //제작한 컴포넌트 넣기
      <div className='App'> 
        <Subject title='웹 카페' sub='웹에 대해 알아봅시다!'></Subject> 
        <Subject title='리액트' sub='리액트에 대해 알아봅시다'></Subject> 
        <TOC></TOC>
        <Content title='HTML5에 대해' desc='홈페이지의 뼈대를 말한다'></Content>
      </div>
      );
  }
}

export default App;

 

 

 

  • 컴포넌트를 파일로 분리
  • Subject.js

import { Component } from 'react';

class Subject extends Component{
    render(){
      return(
        <header>
          <h1>{this.props.title}</h1>
          <p>{this.props.sub}</p>
        </header>
      );
    }
}

export default Subject;

 

 

  • TOC.js

import { Component } from 'react';

class TOC extends Component{
    render(){
      return(
        <nav>
          <ul>
              <li><a href="html5.html">HTML5에 대해</a></li> 
              <li><a href="css3.html">CSS3의 모든 것</a></li>
              <li><a href="js.html">JAVASCRIPT란?</a></li>
          </ul>
        </nav>
      );
    }
  }

export default TOC;

 

 

  • Content.js

import { Component } from 'react';

class Content extends Component{
    render(){
      return(
        <article>
          <h2>{this.props.title}</h2>
          <p>{this.props.desc}</p>
        </article>
      );
    }
  }

export default Content;

 

 

  • App.js

import { Component } from 'react';
import './App.css';
import Subject from './components/Subject';
import TOC from './components/TOC'
import Content from './components/Content'

class App extends Component{
  render(){ //render: export 도움
    return ( //제작한 컴포넌트 넣기
      <div className='App'> 
        <Subject title='웹 카페' sub='웹에 대해 알아봅시다!'></Subject> 
        <Subject title='리액트' sub='리액트에 대해 알아봅시다'></Subject>
        <TOC></TOC>
        <Content title='HTML5에 대해' desc='홈페이지의 뼈대를 말한다'></Content>
      </div>
      );
  }
}

export default App;