본문 바로가기
Frontend/ReactJS(완)

React - 2장 : JSX

by 리키이 2023. 2. 2.

2-1. JSX란?

- JSX는 자바스크립트의 확장 문법이며 XML과 매우 비슷하게 구성되어있다.

- 브라우저에서 실행되기 전에 번들링 되는 과정에서 바벨을 사용해 일반 자바스크립트 형태의 코드로 변환된다.

 

2-2. JSX의 장점

1) 보기 쉽고 익숙하다

- 아래 두 코드는 JSX 코드와 일반 자바스크립트 코드로 변환된 코드이다.

- 단순히 비교만 해봤을때에도 JSX코드가 가독성이 높고 작성하기도 쉽게 느껴진다.

 

function App() {
  return (
    <div>
      Hello <b>react</b>
    </div>
  );
}

 <JSX 코드>

 

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

<일반 JS 코드>

 

2) 더욱 높은 활용도

- JSX에서는 HTML 태그 뿐만 아니라, 컴포넌트도 JSX안에 작성할 수 있다.

 

function App() {
  return (
    <div>
      <Test />
    </div>
  );
}

 

2-3. JSX 문법

1) 감싸인 요소

- 컴포넌트에 여러 요소가 있다면 반드시 부모 요소 하나로 감싸야 한다.

왜 하나로만 감싸야 하나?  
virtual DOM에서 컴포넌트 변화를 감지해 낼 때 효율적으로 비교할 수 있도록 컴포넌트 내부는 하나의 DOM 트리    구조로 이루워져야 한다는 규칙이 있기 때문이다.

 

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

 

2) Fragment

그런데 여기서 꼭 부모요소를 <div> 로 사용하고 싶지 않을 수도 있다.

이때 사용하는 기능이 <Fragment> 이다.

 

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

 

3) 자바스크립트 표현

- JSX안에서는 자바스크립트 표현식을 쓸 수 있다.

 

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

 

4) If 문 대신 조건부 연산자

- JSX 내부의 자바스크립트 표현식에서 if 문을 사용할 수는 없다.

- 조건에 따라 렌더링 할 때는 JSX 밖에서 if문을 사용하여 사전에 값을 설정하거나 {} 안에 삼항연산자를 이용하면 된다.

 

function App() {
  const name = '리액트';
  return (
    <div>
      {name === '리액트' ? (
        <h1>리액트입니다.</h1>
      ) : (
        <h2>리액트가 아닙니다.</h2>
      )}
    </div>
  );
}

 

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

- 특정 상황에서는 조건을 만족할때 내용을 보여주고, 만족하지 않을때 아무것도 렌더링하지 않아야 되는 상황이 나온다.

이럴 때 &&연산자로 구현할 수 있다.

 

function App() {
  const name = '뤼왝트';
  return <div>{name === '리액트' && <h1>리액트입니다.</h1>}</div>;
}
&& 연산자를 사용할 때 한가지 주의해야 할 점
falsy값이 0은 예외적으로 화면에 나타난다.
const number = 0;
return number && <div>내용</div>

 

6) undefined를 렌더링하지 않기

- 리액트 컴포넌트에서 undefined만 반환하여 렌더링하는 상황에서는 에러가 발생한다.

- JSX 내부에서 undefined를 렌더링은 가능하다. 

- 에러를 방지하기 위해서는 OR(||) 연산자를 사용하면 된다.

 

function App() {
  const name = undefined;
  return <div>{name || '리액트'}</div>;
}

 

7) 인라인 스타일링

- DOM 요소에 스타일을 적용할 때는 문자열이 아닌 객체 형태로 스타일을 적용해야 한다.

- 이러한 이름은 - 문자를 없애고 카멜 표기법으로 작성해야 한다.

 

function App() {
  const name = '리액트';
  const style = {
    // background-color는 backgroundColor와 같이 -가 사라지고 카멜 표기법으로 작성됩니다.
    backgroundColor: 'black',
    fontSize: '48px', // font-size -> fontSize
  };
  return <div style={style}>{name} </div>;
}

 

8) class 대신 className

- JSX에서는 class가 아닌 className으로 설정해 주어야 한다.

 

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

 

9) 꼭 닫아야 하는 태그

- HTML에서는 <br> 이나 <input> 과 같은 태그들은 닫지 않는 상태로 코드를 작성해도 작동을 한다.

- JSX에서는 이러한 태그를 무조건 닫아 주어야 한다.

- 상황에 따라서 태그를 선언하면서 동시에 닫을 수 있는데  이를 self-closing태그라고 부르고 태그 사이에 별도의 내용이 들어가지 않는 경우에 해당이 된다.

 

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

'Frontend > ReactJS(완)' 카테고리의 다른 글

React - 6장 : 컴포넌트 반복  (0) 2023.02.13
React - 5장 : ref. DOM에 이름 달기  (0) 2023.02.09
React - 4장 : 이벤트 핸들링  (0) 2023.02.08
React - 3장 : 컴포넌트  (0) 2023.02.06
React - 1장 : React 이해  (0) 2023.02.01

댓글