ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ReactJS] React 기본 코드 구조 및 component 생성
    웹 개발/ReactJS 2021. 4. 15. 03:49
    반응형

    React를 공부하며 정리한 내용입니다. 


     

    React 언어는 JSX (Java script 확장판)이다.

     

    - 중괄호 내에 모든 java script 코드를 넣을 수 있으며 중괄호를 사용해 attribute를 정의한다. 

    const element = <img src={user.avatarUrl}></img>;
    

     

    -사용자의 입력을 삽입할 수 있다. 

    const title = response.potentiallyMaliciousInput;
    // 이것은 안전합니다.
    const element = <h1>{title}</h1>;
    

     

    -jsx는 태그를 꼭 닫아줘야하는데 태그 내에 아무것도 없다면 self-closing을 이용한다.

    <Hello />

     

    React의 가장 작은 단위는 컴포넌트를 이루는 앨리먼트(element)이다.  

     

    - 두 가지 예시는 동일한 React element 객체를 생성한다. 공식 다큐먼트는 아래의 Babel 방식을 추천했다. 

    const element = (
      <h1 className="greeting">
        Hello, world!
      </h1>
    );
    //Babel
    
    const element = React.createElement(
      'h1',
      {className: 'greeting'},
      'Hello, world!'
    );

     

     

    React 컴포넌트(Component)란 UI를 재사용 가능한 개별적인 여러 조각으로 나눈 것이다.

     

    - 함수 컴포넌트는 데이터를 가진 props 객체인자를 받아 element를 반환한다.  

    ** argument 대신 props라는 용어를 쓴다. **

    function Welcome(props) {
      return <h1>Hello, {props.name}</h1>;
    }

     

    - 클래스 컴포넌트는 상위 클래스에서 props 객체인자를 받아 element를 반환하여 렌더링한다. 

    class Welcome extends React.Component {
      render() {
        return <h1>Hello, {this.props.name}</h1>;
      }
    }

     

    - 하위 클래스 컴포넌트로 객체인자 전달 

    <Welcome name = "WEB"></Welcome>
    
    컴포넌트의 이름은 항상 대문자이다.

     

    - Component의 렌더링 과정 

    function Welcome(props) {
      return <h1>Hello, {props.name}</h1>;
    }
    
    const element = <Welcome name="Sara" />;
    ReactDOM.render(
      element,
      document.getElementById('root')
    );

     

    1) <Welcome name="Sara" /> 엘리먼트로 ReactDOM.render()를 호출합니다.

    2) React는 {name: 'Sara'}를 props로 하여 Welcome 컴포넌트를 호출합니다.

    3) Welcome 컴포넌트는 결과적으로 <h1>Hello, Sara</h1> 엘리먼트를 반환합니다.

    4) React DOM은 <h1>Hello, Sara</h1> 엘리먼트와 일치하도록 DOM을 효율적으로 업데이트합니다.

     

     

    React 기본 템플릿 

     

    ▷ public/index.html

    <div id="root"></div>
    

     - 앱 내의 모든 element들은 id가 root인 코드 내에서 정의한다. 

    하나의 앱에서 정의된 element들은 하나의 React DOM에서 관리하기 때문에 이를 “루트(root)” DOM 노드라고 부른다. 

     

     

    ▷ index.js

    import React from 'react';
    import ReactDOM from 'react-dom';

    - react : UI를 위한 라이브러리

    - react-dom : 웹 브라우저에 react를 렌더링(출력)하기 위한 모델 

     

    ReactDOM.render(
        <App />,
      document.getElementById('root')
    );
    

     

    - React 엘리먼트를 루트 DOM 노드에 렌더링 하기 위해서는 render() 함수의 첫 번째 인자에 넣어야한다.

    - React element가 한번 렌더링된 이후에는 변화하지 않기 때문에 새로운 element를 생성하여 render()함수를 호출해야한다.

    하지만 React DOM은 해당 엘리먼트와 기존 엘리먼트를 비교해 변화한 부분만 업데이트 한다. 

     

     

    ▷ App.js (최상위 컴포넌트)

    import { Component } from 'react';
    

    -  react 라이브러리에서 Component class를 로딩한 것을 의미한다. 

     

    export default App;
    

    외부에서의 App class 사용을 허용한다는 의미

    - 다른 class component 에서 사용하려면 꼭 정의해야한다.

     

    import logo from './logo.svg';
    import './App.css';
    import { Component } from 'react';
    
    class App extends Component {
      render(){ 
        return(
        <div className="App">
          Hello, react!
        </div>
      );
    }
    }
    
    export default App;
    

    - ReactDOM이 렌더링하는 클래스 컴포넌트를 의미한다.

     

     

    React Component 예시  

     

    1) Component 생성 

    App class component 내 element들을 Subject,Toc component로 만들어 사용했다. 

     

    - component 적용 전 

    class App extends Component {
      render(){ 
        return(
        <div className="App">
         <header>
        <h1>
          WEB STUDY
        </h1>
        </header>
          <nav>
        <ul>
          <li><a>React basic</a></li>
          <li><a>React intermediate</a></li>
          <li><a>React Advanced</a></li>
        </ul>
        </nav>
        </div>
      );
        }
      }

     

    - component 적용 후

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

     

    class Subject extends Component {
      render(){ 
        return(
        <header>
        <h1>
          WEB STUDY
        </h1>
        </header>
      );
    }
    }
    
    class Toc extends Component {
      render(){ 
        return(
        <nav>
        <ul>
          <li><a>React basic</a></li>
          <li><a>React intermediate</a></li>
          <li><a>React Advanced</a></li>
        </ul>
        </nav>
      );
    }
    }
    

     

    2) Component parameter 전달 

     

    - 전달 받은 parameter 표시

    {this.props.title}

     

    - parameter 전달

    <Subject title = "WEB STUDY" subtitle = "We can do it"></Subject>
    

     

    -전체 예시 

    APP component에서 Subject component로 title, subtitle의 parameter를 전달한다.

    class Subject extends Component {
      render(){ 
        return(
        <header>
        <h1>
          {this.props.title}
        </h1>
        <h5>
          {this.props.subtitle}
        </h5>
        </header>
      );
    }
    }
    
    class App extends Component {
      render(){ 
        return(
        <div className="App">
        <Subject title = "WEB STUDY" subtitle = "We can do it"></Subject>
        <Menu></Menu>
        </div>
      );
        }
      }
    
      export default App;

     

    일반적으로  src 내에 components 폴더를 생성해 component들을 관리한다. 

     

    - components 폴더 내 Subject.js를 사용한다. 

    import Subject from './components/Subject';
    

     

    -전체 코드 예시 

    import logo from './logo.svg';
    import './App.css';
    import { Component } from 'react';
    import Subject from './components/Subject';
    
    class App extends Component {
      render(){ 
        return(
        <div className="App">
        <Subject title = "WEB STUDY" subtitle = "We can do it"></Subject>
        <Menu></Menu>
        </div>
      );
        }
      }
    
      export default App;

     

    import { Component } from 'react';
    
    class Subject extends Component {
        render(){ 
          return(
          <header>
          <h1>
            {this.props.title}
          </h1>
          <h5>
            {this.props.subtitle}
          </h5>
          </header>
        );
      }
      }
    
    export default Subject;
    

     


    참고 및 출처 

     

    ko.reactjs.org/docs/hello-world.html

     

    Hello World – React

    A JavaScript library for building user interfaces

    ko.reactjs.org

    opentutorials.org/module/4058/24737

     

    컴포넌트 제작 - React

    수업소개 React의 핵심 기능인 컴포넌트를 제작하는 방법을 소개합니다.  강의1 코드의 변경 사항 강의2 기본적인 컴포넌트를 만들어봅니다.  코드의 변경 사항 강의3  나머지 태그들을 컴포넌

    opentutorials.org

     

    반응형

    댓글

Designed by Tistory.