다라다라V
article thumbnail
Published 2022. 10. 9. 00:33
[React] 02. JSX 프레임워크/REACT
728x90
반응형
리액트는 HTML과 비슷한 형식의 코드 작성 방식인 JSX를 통해 코드를 작성합니다. 오늘은 JSX의 기능과 규칙들을 배워보도록 하겠습니다. 또한 코드의 가독성과 작성을 돕는 ESLint와 Prettier도 다뤄보도록 하겠습니다.

코드 이해하기

src/App.js 파일을 열어보면 다음과 같은 코드가 있을 것입니다.

import logo from './logo.svg';
import './App.css';

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edit <code>src/App.js</code> and save to reload.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          Learn React
        </a>
      </header>
    </div>
  );
}

export default App;

위의 코드를 하나씩 이해해봅시다.


📚 import 구문

import logo from './logo.svg';
import './App.css';
  • import 구문 특정 파일을 불러오는 것을 의미
  • 모듈을 불러와서 사용하는 것은 사실 브라우저에 없는, Node.js에서 지원하는 기능

📚 번들러(Bundler)

  • 브라우저에서도 이러한 기능을 사용하기 위해 번들러(bundler)를 사용
  • 번들(bundle)파일을 묶어서 연결한다는 것
  • 웹팩, Parcel, browserify 등의 도구들이 있지만, 리액트 프로젝트에서는 주로 웹팩을 다룸
  • 번들러 도구를 사용하면 import로 모듈을 불러왔을 때 모듈을 모두 합쳐 하나의 파일로 만들어 줌
  • 최적화 과정에서 여러 개의 파일로 분리할 수도 있음

📚 로더(Loader)

  • 웹팩을 이용하면 SVG 파일과 CSS 파일도 불러와서 사용할 수 있음
  • 파일들을 불러오는 것로더(loader)
  • CSS 파일을 불러오는 css-loader, 웹 폰트나 미디어 파일을 불러오는 file-loader 등이 있음
  • 리액트 프로젝트를 만들 때 사용했던 create-react-app이 웹팩의 로더를 자동으로 설치

📚 함수 컴포넌트

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edit <code>src/App.js</code> and save to reload.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          Learn React
        </a>
      </header>
    </div>
  );
}
  • 이 코드는 function 키워드를 사용하여 App이라는 컴포넌트를 만듦
  • 이러한 컴포넌트를 함수 컴포넌트라고 함
  • 프로젝트에서 컴포넌트를 렌더링하면 함수에서 반환하고 있는 내용을 보임

📌 JSX란?

위에 작성된 코드는 HTML 문법과 비슷해 보입니다. 이러한 코드는 자바스크립트의 확장 문법JSX입니다. 코드가 번들링되는 과정에서 바벨을 사용하여 일반 자바스크립트 형태의 코드로 변환됩니다.

function App() {
  return (
    <div>
      Hello <b>react</b>
    </div>
  );
}
function App() {
  return React.createElement("div", null, "Hello", React.createElement("b", null, "react"));
}

JSX 코드는 아래의 코드로 변환됩니다. React.createElement를 컴포넌트 렌더링 때마다 입력하는 일은 비효율적이라 JSX를 사용하게 된 것입니다.


📌 JSX의 장점

📚 보기 쉽고 익숙하다

HTML 코드를 작성하는 것과 비슷하여 일일이 요소들을 만들 지 않아도 됩니다.


📚 더욱 높은 활용도

div나 span과 같은 HTML 태그를 사용하고 앞으로 사용할 컴포넌트도 JSX 안에서 사용할 수 있습니다.


📌 JSX 문법

📚 감싸인 요소

컴포넌트에 여러 요소가 있다면 반드시 부모 요소 하나로 감싸야합니다. Virtual DOM에서 컴포넌트 변화를 효과적으로 감지하기 위해 컴포넌트 내부는 하나의 DOM 트리 구조로 이루어져야 합니다.

function App() {
  return (
    <div>
      <h1>리액트 안녕!</h1>
      <h2>잘 작동되니?</h2>
    </div>
  );
}

<div> 태그 외에도, 리액트 v16 이상부터 도입된 Fragment <Fragment> 태그나, Fragment의 다른 형태인 <></>으로 감쌀 수 있습니다.


📚 자바스크립트 표현

JSX는 자바스크립트 표현식을 사용할 수 있습니다. JSX 내부에서 코드를 { }로 감싸면 됩니다.

function App() {
  const name = "리액트";
  return (
    <div>
      <h1>리액트 안녕!</h1>
      <h2>잘 작동되니?</h2>
    </div>
  );
}

자바스크립트 ES6의 변수 설정과 관련된 내용은 다음의 링크를 참고하세요

https://daradarav.tistory.com/1?category=1047657 

 

[JavaScript] 01. INTRODUCTION 소개

📌 I. INTRODUCTION TO JAVASCRIPT 📚 1. What is JavaScript? JavaScript는 웹 개발의 핵심으로 웹 사이트에 움직임을 주는 동적 처리를 가능하게 합니다. JavaScript는 발전을 거듭하며 현대 웹..

daradarav.tistory.com


📚 if문 대신 조건부 연산자

JSX 내부의 자바스크립트 표현식에서 if 문을 사용할 수 없습니다. JSX 밖에서 if 문을 사용하여 사전에 값을 설정하거나

{ } 안에 조건부 연산자를 사용할 수 있습니다. 삼항 연산자를 통해 표현할 수 있습니다.

function App() {
  const name = "리액트";
  return (
    <div>
      {
        name === "리액트" ? (
          <h1>리액트 작동 중</h1>
        ) : (
          <h2>리액트가 아님</h2>
        )
        }           
    </div>
  );
}

이렇게 코드를 작성하면 "리액트 작동 중"이라는 문구가 작성됩니다. const name의 값을 변경하면 "리액트가 아님"이라는 문구가 출력됩니다.


📚 AND 연산자(&&)를 사용한 조건부 렌더링

특정 조건을 만족할 때만 내용을 보여주고, 조건을 만족하지 않으면 아무것도 렌더링 하지 않아야 할 때가 있습니다. 이러한 상황은 조건부 연산자를 통해 구현할 수 있습니다.

function App() {
  const name = "리액트";
  return (
    <div>
      {name == "리액트" && <h1>리액트입니다.</h1>} 
    </div>
  );
}

앞선 코드는 && 연산자를 사용하여 조건부 렌더링을 할 수 있습니다. 리액트에서 false를 렌더링할 때는 null과 마찬가지로 아무것도 나타나지 않기 때문에 이와 같은 코드로 작성할 수 있습니다. 단 falsy한 값인 0은 예외적으로 화면에 출력됩니다.


📚 undefined 는 렌더링하지 않기

리액트 컴포넌트에서는 함수에서는 null과 달리 undefined만 반환하여 렌더링하는 상황을 만들면 안 됩니다. OR( || )연산자를 사용해 undefined일 때의 값을 설정할 수 있습니다.

import './App.css';

function App() {
  const name = undefined;
  return name || "값이 undefined입니다."
}

export default App;

단 JSX 내부에서 undefined를 렌더링하는 것은 괜찮습니다.


📚 인라인 스타일링

리액트에서 DOM 요소에 스타일을 적용할 때는 문자열 형태가 아닌 객체 형태로 넣어야 합니다. 스타일 이름 중에서 background-color 처럼 -가 있는 경우 -를 없애고 카멜 표기법(camelCase)으로 작성해야 합니다. 따라서 backgroundColor, fontSize, fontWeight 등과 같이 적혀야 합니다.

function App() {
  const name = "리액트";
  const style = {
    backgroundColor: 'black',
    color: 'aqua',
    fontSize: '48px',
    fontWeight: 'bold',
    padding: 16
  };
  return <div style={style}>{name}</div>
}

📚 class 대신 className

HTML에서 CSS 클래스를 사용할 때는 <div class="myClass"></div>와 같이 class라는 속성을 설정합니다. 그러나 JSX에서는 class가 아닌 className으로 설정해 주어야 합니다. 이전에는 class로 CSS 클래스를 설정하면 오류가 발생하였지만, 리액트 v16이상부터는 class를 className으로 변환해주고 경고를 띄웁니다.


📚 꼭 닫아야 하는 태그

HTML에서는 <input>과 같이 태그를 닫지 않은 채로 작성하는 경우가 있었습니다. 그러나 JSX에서 태그를 닫지 않으면 오류가 발생합니다.

function App() {
  const name = "리액트";
  return (
    <>
      <div className="react">{name}</div>
      <input></input>
    </>
  )
}

 

태그 사이에 별도의 내용이 들어가지 않는 경우 <input />로 작성할 수 있습니다. 이러한 태그를 self-closing 태그라고 합니다. 태그 선언과 동시에 닫을 수 있는 태그입니다.

function App() {
  const name = "리액트";
  return (
    <>
      <div className="react">{name}</div>
      <input />
    </>
  )
}

📚 주석

JSX 내부에서 주석을 작성할 때에는 {/*   */}와 같은 형식으로 여러 줄에 주석을 작성합니다. 시작 태그를 여러 줄로 작성할 때는 그 내부에서 //와 같은 형태의 주석도 작성할 수 있습니다.


📌 ESLint와 Prettier 적용하기

ESLint문법 검사 도구이고, Prettier코드 스타일 자동 정리 도구입니다. 두 도구 모두 VS Code 마켓 플레이스에서 설치할 수 있습니다.

📚 ESLint

ESLint는 코드 작성 시 발생된 실수에 대한 에러 및 경고 메시지를 에디터에서 바로 확인할 수 있도록 합니다. 초록색 줄이 그어진 코드는 무시해도 되지만, 빨간색 줄이 그어진 코드는 반드시 고쳐야 합니다. 에디터 하단에 뜨는  문제 탭은 VS Code 상단 메뉴에서 보기 > 문제를 클릭하여 열 수 있습니다.


📚 Prettier 

JSX는 코드의 가독성을 위해 들여 쓰기를 사용합니다. VS code에서 F1을 누르고 format이라고 입력한 다음 enter를 입력합니다. Prettier가 자동으로 코드를 정리해줄 것입니다. Prettier는 코드를 정렬해줄 뿐 아니라 세미콜론이 빠진 곳에는 추가되고 작은 따옴표를 큰 따옴표로 바꿔줍니다.

 

반응형
profile

다라다라V

@DaraDaraV

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!