본문 바로가기

개발일지

[생활코딩] React #2

React #2 컴포넌트 제작

 

리액트가 없다면?

npm run start를 했을 때 public 디렉토리를 찾음.

 

<시맨틱 태그> 의미론적으로 정의할 때 사용.

<header> 시맨틱 태그는 아무런 기능이 없지만 제목 부분임을 의미

<nav> <article> 등...

 

시맨틱 태그마다 n만 줄의 코드가 있다면? -> 인지하기 어려움

태그를 감추고 이름만 심플하게 해도 웹페이지 내용은 그대로 해주는 것이 리액트

 

 

컴포넌트 만들기

class App extends Component {
  render() {
    return (
      <div className="App">
        Hello, React!
      </div>
    )
  }
}
 
컴포넌트를 만드는 코드.
 
객체 지향으로 이해하면!
리액트가 가지고있는 Component라는 클래스를 상속해서 새로운 클래스 App을 만든다.
render()라는 메소드를 가지고 있다.
 
 
class Subject extends Component {
  render() {
    return();
  }
}

Subject라는 Component를 만들겠다는 의미. 클래스의 첫문자는 꼭 대문자!

render()라는 함수는 꼭 있어야함.

일반적으로 함수를 정의할 때 앞에 function을 쓰지만 class 내부의 함수는 function을 생략한다.

 

 

return(
      <header>
            <h1>WEB</h1>
            world wide web!
      </header>
    );

return 괄호 안에 코드를 작성.

주의! 컴포넌트를 만들 때는 반드시 하나의 최상위 태그로 시작해야 한다. <header>, <div>와 같은,,

 

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

 

리액트 코드에서는 <Subject> 지만, 웹브라우저는 <header>로 바꿔줌.

웹브라우저는 리액트의 존재를 모르고, 리액트가 최종적으로 웹브라우저한테 html코드를 공급해준다.

 

 

App.js는 유사 자바스크립트로 거의 자바스크립트와 유사하지만, 자바스크립트가 아니다.

문법상으로 편하도록 페이스북이 만들어 놓은 jsx 언어.

Create-React-App이 jsx 언어를 자바스크립트 언어로 바꿔줌.

 

 

TOC, Content 컴포넌트 추가하기

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 HyperText Markup Language.
      </article>
    );
  }
}
class App extends Component {
  render() {
    return (
      <div className="App">
        <Subject></Subject>
        <TOC></TOC>
        <Content></Content>
      </div>
    )
  }
}
 
 
 

리액트는 정리정돈의 도구와 같다!

컴포넌트 이름에만 집중하게 함으로써 복잡도를 낮춤.

 

 

 

props

 

<li><a href="1.html">HTML</a></li>

링크 태그 <li>

a로 태그임을 알리고 href라는 속성으로 주소를 나타냄.

즉, a라는 "이름"의 공통점과 href라는 "속성"의 차이점.

 

-> 재사용성이 높게 만들 수 있다!

 

 

<h1>{this.props.title}</h1>
        {this.props.sub}
this.props.원하는 속성의 이름

 

 

<Subject></Subject>
 
는 항상 똑같은 결과만 나타내지만
 
 
<Subject title="WEB" sub="world wide web!"></Subject>

props를 입력하면 출력값이 그 때마다 달라지게 됨.

완벽하게 동작하는 사용자 정의 태그!

 

 

React Developer Tools

크롬의 확장 프로그램.

우리가 만든 앱의 컴포넌트들을 보여주는 도구

 

실제 태그를 볼 때 -> 요소

리액트 분석 -> Tools 메뉴 사용, 실시간으로 내용 변경 가능!

 

 

Component 파일로 분리하기

scr -> components 라는 새로운 디렉토리 생성해서 컴포넌트들을 분리함.

 

TOC 컴포넌트 분리

하나의 컴포넌트 안에는 여러 변수와 함수가 존재할 수 있다.

그 중에서 어떤 것을 외부에 사용할 수 있도록 허용할 것인지. -> export

 

export default TOC;

 
TOC.js 를 가져다 쓰는 쪽에서 TOC라는 클래스를 가져다 사용할 수 있게 됨.

 

import TOC from "./components/TOC";
 
TOC를 가져올 경로 명시
 
 
TOC.js
 
 
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>
      );
    }
  }

  export default TOC;
 
 
App.js
 
import React, { Component } from 'react';
import TOC from "./components/TOC";
import Content from "./components/Content"
import Subject from "./components/Subject"
import './App.css';



class App extends Component {
  render() {
    return (
      <div className="App">
        <Subject title="WEB" sub="world wide web!"></Subject>
        <TOC></TOC>
        <Content title="HTML" desc="HTML is HyperText Markup Language."></Content>
      </div>
    )
  }
}

export default App;
 
 
-> 코드가 간단명료해지고, 원하는 코드를 빠르게 찾을 수 있다.
-> App.js가 아닌 다른 리액트 파일에서도 컴포넌트를 재사용할 수 있다.

 

'개발일지' 카테고리의 다른 글

Git-flow  (1) 2023.01.03
[코딩애플] 리액트 기초 #1  (0) 2022.09.20
[생활코딩] React #1  (0) 2022.09.17
[스파르타코딩클럽] 웹개발 종합반 3주차  (0) 2022.08.27
[스파르타코딩클럽] 웹개발 종합반 2주차  (1) 2022.08.24