본문 바로가기
프로그래밍/React

[React] 기본적인 컴포넌트 만들기

by 소소로드 2021. 1. 22.

해볼 예제는 <header>태그, <nav>태그, <article>태그의 내용들을 컴포넌트화를 통해
각각 분리하는 작업을 해볼 것이다.

public > pure.html 생성

 <html>
    <body>
        <header>
            <h1>WEB</h1>
            world wider web!
        </header>
        <nav>
            <ul>
                <li><a href="1.html">HTML</a></li>
                <li><a href="2.html">CSS</a></li>
                <li><a href="3.html">JavaScript</a></li>
            </ul>
        </nav>
        <article>
            <h2>HTML</h2>
            HTML is Markup Language;
        </article>
    </body>
 </html>

컴포넌트화의 이유는, 이런 HTML코드가 만약 만줄 이상이 넘어간다면 작업이 피곤해지기 때문이다.

App의 기본구조에서 앞으로 계속 사용하고 익숙해져야 할 부분이

class XX extends Component {
  render() {
    return (

    );
  }
}

바로 이 부분이다. 컴포넌트화를 시키기 위해서는 이 코드자체를
하나의 실행 구문으로 외우는 게 편하다. 이제 새로운 컴퍼넌트를 만들어보자.

src > App.js

 import { render } from '@testing-library/react';
 import React, { Component } from 'react';
 import './App.css'; 

 class Subject extends Component {
  render() {
    return (
      <header>
          <h1>WEB</h1>
          world wider web!
      </header>
    );
  }
 }

 class App extends Component {
  render() {
    return (
      <div className="App">
        <Subject><Subject>
      </div>
   );
  }
 }

 export default App;

순서
1. Subject라는 이름의 컴포넌트를 만들어준다. 이때 컴포넌트의 이름은 반드시 대문자로 시작
2. return()안에, html의 코드에서 따로 떼어줄 내용을 복붙해서 넣는다.
   이때, 반드시 하나의 최상위 태그 하나만을 넣어줄 수 있다.
3. 마지막으로 className="App"안에 Subject를 태그이름으로 정의해준다.
=> 이렇게하면 App의 안쪽이 실행되면서 <Subject>태그를 Subject 컴포넌트로 알아듣고,
     그 안의 태그들을 리턴해주는 결과가 나오게 된다. 

src > App.js

 import { render } from '@testing-library/react';
 import React, { Component } from 'react';
 import './App.css'; 

 class Subject extends Component {
  render() {
    return (
      <header>
            <h1>WEB</h1>
            world wider web!
      </header>
    );
  }
 }

 class TOC extends Component {
  render() {
   return (
    <nav>
      <ul>
          <li><a href="1.html">HTML</a></li>
          <li><a href="2.html">CSS</a></li>
          <li><a href="3.html">JavaScript</a></li>
      </ul>
    </nav>
   );
  }
 }

 class Content extends Component {
  render() {
    return (
      <article>
        <h2>HTML</h2>
        HTML is Markup Language;
      </article>
    )
  }
 }

 class App extends Component {
  render() {
    return (
      <div className="App">
        <Subject></Subject>
        <TOC></TOC>
        <Content></Content>
      </div>
   );
  }
 }

 export default App;

nav와 article까지 결과적으로 다 변경해준 모습이다.
Subject와 마찬가지로 태그모양으로 App안에도 넣어주었다.