본문 바로가기

WINK-(Web & App)/HTML & CSS & JS 스터디

[2023 신입부원 심화 스터디] 신진욱 #5주차 - 어 리액트 왔어

반응형

0,1 섹션은 어떻게 공부할 지와 환경설정에 대한 내용이라 블로깅은 건너 뛰었습니당.

 

1. 리액트의 중요성

- 유지보수 좋음

- 코드의 복잡성 제거

- 성능 향상

...

 

2. 컴포넌트 생성

- React의 핵심 기능

- 긴 코드들을 사용자 정의 태그로 간결하게 만들기 위함

  • pure.html
<html>
    <body>
        <header>
          <h1>WEB</h1>
          world wide 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 HyperText Markup Language.
        </article>
     </body>
</html>
  • App.js
    • header, nav, article 태그 부분 사용자 태그로 바꿔주기
import React, {Component} from 'React';
import './App.css';

// html에서 <header>태그 부분들을 subject라는 이름으로 바꾸고 싶다.
// 클래스 이름 첫 글자는 대문자로 작성하기!

class Subject extends Component { // 대문자로 이름 시작해야함
    render() { // 반드시 render 함수가 있어야함
// 자바 스크립트에서 클래스 안에 있는 함수는 function 안붙여도 됨.
        return ( 
          <header> // 하나의 최상위 태그만 써야한다. (여기선 header)
            <h1>WEB</h1>
            world wide 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 HyperText Markup Language.
          </article>
        );
    }
}

class App extends Component { // Component 생성 코드
    render() {
        return (
          <div className="App">  // 하나의 최상위 태그만 써야한다. (여기선 div)
             <Subject></Subject>  // 이렇게 하면 리액트 코드에서는 우리가 설정한대로 보이지만 웹 브라우저가 읽을땐 <header>태그 부분 내용들로 읽는다.
             <TOC></TOC>
             <Content></Content>
          </div>
        );
    }
}

export default App;

3. props

- 컴포넌트를 사용할 때 값을 동적으로 하고 싶을 때 props가 사용된다.

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

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

class App extends Component {
    render() {
        return (
            <div className="App">
                <Subject title="WEB" sub="world wide web!></Subject>
                // title의 값과 sub의 값이 입력값이 되어서 이에 따라 달라지는 출력값을 화면에 표시
                <TOC></TOC>
                <Content title="HTML" desc="HTML is HyperText Markup Language."></Content>
            </div>
        );
    }
}

4. Component 파일로 분리

  • App.js
import React, {Component} from 'React';
import TOC from "./components/TOC"; // TOC.js의 TOC 컴포넌트 이용
import Subject from "./components/Subject"; // Subject.js의 Subject 컴포넌트 이용
import Content from "./components/Content"; // Content.js의 Subject 컴포넌트 이용
import './App.css';

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

export default App;
  • TOC.js (./components/TOC.js)
import React, {Component} from 'React';

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; // 외부에서 사용할 수 있게 한다.
  • Subject.js (./components/Subject.js)
import React, {Component} from 'React';

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

export default Subject; // 외부에서 사용할 수 있게 한다.
  • Content.js (./components/Content.js)
import React, {Component} from 'React';

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

export default Content; // 외부에서 사용할 수 있게 한다.
반응형