Coding/React

[React] JSX 문법 정리

김윤일 2024. 4. 9. 08:30

미리보기 띄우고 시작(터미널에서 npm start)
app.js에서 <div> 하나만 남기고 시작

근데 js파일에서도 html 코드 작성 가능하네? (<div>)<- 실은 html이 아니라 JSX임. .js파일에서 쓰는 html 대용품

JSX 문법

 

1. 태그는 무조건 닫아준다. ( Self-Closing Tags )

 대부분의 HTML요소들은 두 가지의 태그를 사용한다. 오프닝태그<div>, 그리고 클로징태그</div>

그러나 <img>, <input>과 같은 몇몇의 html요소들은 한 태그만 사용한다.이 단일 태그 요소에 속하는 태그를 셀프 클로징 태그( Self-Closing Tags )라고 한다. JSX는   Self-Closing Tags의 경우에도 끝에 /를 붙여 닫아줘야한다.

JSX에서는 반드시 태그를 닫아야 한다.

<input type = "text" />
<br />
<img />

2. 최상위 태그(부모 태그) 는 오직 하나만 있어야 한다.

JSX에서는 최상위에 있는 태그가 여러 개 있으면 안된다. 다른 말로는 병렬 기입을 할 수 없다.

 

위 코드처럼 최상위에 div 태그가 2개 존재하고 있으면 에러가 발생한다. 

따라서 아래처럼 하나의 태그로 여러 태그를 감싸 작성해야 한다.

<div>,<React.Fragment>,<> 세가지를 사용할 수 있다. 

  • <div> - 많이 사용하지만, 단순히 부모태그로 사용하기 위해 의미 없이 div태그를 자주 사용하게 되면 시맨틱한 마크업 작성에 방해가 된다. 자원낭비
  • <React.Fragment> - div와 같은 별도의 노드를 추가하지 않고 여러 개의 자식을 감싸줄 수 있다
import React, { Fragment } from 'react'
코드 상단에 다음과 같이 작성하면 
<React.Fragment>를  <Fragment>로 표기할 수 있다.  
  • <> - <React.Fragment>의 단축 문법. 가장 간편하지만 해당 태그에서는 props를 설정할 수 없다는 특징을 기억하자.

3.  JSX의 표현식 - { } (데이터바인딩)

JSX에서는 자바스크립트 표현식을 사용할 수 있다. 이때, {} 중괄호를 사용한다.
{ } 내부에는 변수, 수식, 속성 등 유효한 JavaScript 표현식을 작성할 수 있게 된다.

//html
document.querySelector("h4").innerHTML = post;

/*JSX*/
<h4>{ post }</h4>

변수에 있던 자료를 html에 넣고 싶으면 위처럼 길게 작성해야 했는데 

JSX에서는 { } 중괄호를 사용하여 변수를 넣고싶은 곳에 넣으면 된다.  


4. class 넣을 땐 className

JavaScript에서는 class는 예약어라서 class가 선언되기 때문에, JSX에서는 className으로 사용해야한다.

// bad
<div class = "id"></div>

// good
<div className = "password"></div>

 



5. JSX에서의 모든 Property 이름은 CamelCase(카멜케이스) 사용

CSS 속성은 스네이크표기법을 사용하였지만 react에서는 카멜케이스 표기법을 사용한다.
예로 들면
font-size : X
fontSize : O

위처럼 하이픈기호('-')는 JavaScript에서 뺄셈 기호로 사용되기 때문에 붙여서 작성하되 두 번째 단어의 첫 문자를 대문자로 작성해야한다.


6. 인라인 스타일 적용 시 객체 사용하기

인라인 스타일은 스타일 속성을 직접 태그의 속성으로 지정하는 방식으로 스타일링을 구현하는 방법이다. JSX에서도 인라인 스타일을 사용할 수 있는데, 작성 규칙이 기존의 HTML, JavaScript와 다르다.

 

JSX에서의 인라인 스타일은 아래 코드와 같이 객체를 사용해야 한다.

<div style={{ backgroundColor: 'red', color: 'white' }}>Hello World</div>

 

스타일 속성은 객체 형태로 지정하며, 객체 내부에서는 CSS 속성을 CamelCase로 작성한다. 그리고 속성값은 따옴표 대신 중괄호로 감싸준다.

style = {{ 스타일명 : '값' }}  ← 오브젝트 자료 형식으로 넣어야한다.


7. if 문 대신 조건부 연산자

JSX 내부의 자바스크립트에서는 if 문을 사용할 수 없다.
JSX 내부에서 조건부 렌더링을 할 때는 보통 삼항 연산자를 사용하거나, AND연산자(&&)를 사용한다.


 

8. 주석

{/* 내용 */}, 태그 사이에 //내용 으로 작성 가능

      <div>
        {/* 주석 내용 */}
        <div// 태그 사이에 주석 내용>
        	my-app
        </div>
      </div>

 

 

 


 

 


 아래 보기를 통해 맞는 코드를 고르시오.

<h4 style="color : red">블로그 제목</h4>					//1번
<h4 style={{color : 'red', fontSize : '16px'}}>{ post }</h4>		//2번
<h4 style={{color : 'red', font-size : '16px'}}>{ post }</h4>		//3번
<h4 style={color : 'red', font-size : '16px'}>{ post }</h4>		//4번

해설

더보기

1. html이 아닌 JSX임 JSX에서는 스타일 속성을 작성하려면 중괄호 열고 작성해야한다.

2. 정답

3. font-size가 아닌 fontSize라고 작성해야한다.

4. 중괄호 열고 또 중괄호 열어서 오프젝트 파일 형식으로 작성해야한다.





(참고) 에러메세지는 터미널/ 미리보기 브라우저에서 확인 or 크롬 개발자도구 콘솔에서 확인

(참고) css파일 쓰려면 상단에서 import 'css파일경로'; 

**오브젝트 자료가 뭐임?

 

참고

https://velog.io/@sunhee5951/react-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EB%A5%BC-%ED%91%9C%ED%98%84%ED%95%98%EB%8A%94-JSX

https://velog.io/@day_1226/%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-JSX-%EC%9E%91%EC%84%B1-%EA%B7%9C%EC%B9%99-7%EA%B0%80%EC%A7%80