Library | Framework/React

[React] JSX 기본 문법 맛보기

나는김혜린 2022. 1. 21. 23:41

서론

리액트 한 책을 다 보고 이제 강의를 보고 있는데, 책에서 배우지 못했던 JSX 문법들을 배울 수 있어서

오늘이 끝나기 전에 간단히 정리해보려고 한다.

 

JSX란?

React에서 사용되는 문법이다.

보기엔 HTML이랑 비슷해보이지만 JSX는 몇몇 규칙들이 존재한다.

 

JSX 문법의 규칙

1. 태그는 꼭 닫혀있어야한다.

<input type="text">

위 코드를 JSX에서 쓴다면 오류가 뜬다.

<input type="text" /> // 1
<input type="text"></input> // 2

따라서 모든 태그를 />나 </ >로 태그를 닫아줘야 한다.

 

2. 두 개 이상의 엘리먼트는 하나의 엘리먼트로 감싸줘야 한다.

<div>Hello</div>
<div>React</div>

이런 식의 코드는 JSX에서 오류가 발생하기 때문에

이 두 엘리먼트를 하나의 엘리먼트로 감싸준다.

<div>
    <div>Hello</div>
    <div>React</div>
</div>

 

만약 스타일이 복잡해지고 table 관련 태그를 쓸 땐 Fragment를 사용할 수 있다.

import React, { Component, Fragment } from 'react';

<Fragment>
  <div>
    <h1>안녕하세요 리액트</h1>
  </div>
  <div>
    <h2>React</h2>
  </div>
</Fragment>

Fragment를 사용하려면 먼저 import를 해주고 감싸준 div 대신 Fragment를 적어주면 된다.

이것을 사용하면 렌더링된 웹에선 불필요한 div가 사라진다. (Fragment도 안 보임)

 

JSX 내부에서 자바 스크립트 값을 사용할 때

render() {
  const name = 'react';
  return (
    <div>
      hello {name}
    </div>
  )
}

위 코드처럼 중괄호({})를 사용하여 js 값을 사용할 수 있다.

 

만약 조건부 렌더링을 하고 싶다면 이렇게 사용할 수 있다.

render() {
  return (
    <div>
      {
        1 + 1 === 2
        ? '맞다'
        : '틀리다'
      }
    </div>
  )
}

true일 때만 값을 보여주고 false일 땐 안 보여주고 싶다면

name === 'react' && <div>react</div>

이렇게 사용해준다.

name 변수가 react라면 div 태그를 반환한다는 의미.

 

조건부가 여러 개일 땐 JSX 외부에서 하는 게 일반적이다.

하지만 굳이 내부에서 하고 싶다면

const value = 1;
{
  (function() {
    if(value === 1) return <div>1이다!</div>
    if(value === 2) return <div>2다!</div>
    if(value === 3) return <div>3이다!</div>
    return <div>없다</div>
  })()
}

이렇게 사용할 수 있고 화살표 함수를 사용해 더 간단하게 표현할 수도 있다.

{
  (() => {
    if(value === 1) return <div>1이다!</div>
    if(value === 2) return <div>2다!</div>
    if(value === 3) return <div>3이다!</div>
    return <div>없다</div>
  })()
}

 

React에서 style 적용

CSS가 아닌 react에서 스타일을 적용시킬 땐 객체 형태로 사용한다.

또한 background-color와 같은 속성은 backgroundColor 이런 식으로 바꾸어 써야 한다.

const style = {
  backgroundColor : 'black',
  padding: '16px',
  color: 'white',
  fontSize: '23px'
}
return (
  <div style={style}>Hello React</div>
);

 

JSX에서 class 사용

JSX에선 class 대신 className 이라는 값을 사용한다. 사실 class라고 해도 작동되긴 하지만 저렇게 적는 게 좋음

<div className="App"></div>

 

담소

서론에서도 말했다시피 React 새 강의를 듣고 있다.

기본은 배웠으니 클론 웹페이지라도 하고 싶은 마음뿐... 내일도 홧팅홧팅