본문 바로가기
SPA/React

JSX 문법

by memeseo 2022. 10. 19.

JSX란?

  • 자바스크립트의 확장 문법
  • 자바스크립트의 공식적 문법이라고는 할 수 없음
  • 브라우저 실행 전 코드가 번들링 되는 과정에서 바벨을 사용하여 일반 자바스크립트 형태의 코드로 변환

 

예시)

  • 변환 전
function App(){
	return (
    	<div> react <span> practice <span> </div>
    )
}

 

  • 변환 후
function App(){
	return React.createElement("div", null, "react", 
     	 	 React.createElement("span", null, "practice"))
}

 

 


 

JSX 문법 규칙 및 사용 방법

 

1. 컴포넌트에 여러 요소가 있을 경우 반드시 부모 요소가 감싸는 형태여야 한다.

function App(){
	return (
    	<div>
        	<h1>자식</h1>
            <h3>자식</h3>
        </div>
    )
}

 

: 리액트가 사용하는 Virtual DOM 방식에서는 컴포넌트 변화를 감지할 때 효과적으로 비교하고자 컴포넌트 내부는 하나의 DOM 트리 구조로 이루어져야 한다는 규칙 때문.

 


 

2. 자바스크립트 표현

 

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

 

function App(){
	const name = "홍길동";
    return (
    	<div>
        	<h1>{name}</h1>
        </div>
    )
}

 

: name을 {}안에  넣어 렌더링 할 수 있다.

 


 

3. JSX 내부 자바스크립트 표현식에서는 if문을 사용할 수 없어 삼항 연산자를 사용한다.

 

function App(){
	const name = "react";
    return (
    	<div>
     	   {name == 'react' ? 
                (<h1> this is react </h1>)
                :
                (<hi> this isn't react </h1>)
            }
        </div>
    )
}

 

+ AND 연산자로도 가능

 

function App(){
	const name = "react";
    return (
    	<div>
        	{name == 'react' && <h1> this is react </h1>}
        </div>
    )
}

 

: && 연산자로 조건부 렌더링이 가능한 이유는 리액트에서 false를 렌더링 할 때 null과 마찬가지로 아무것도 나타나지 않기 때문. 하지만 falsy한 값인 0은 예외적으로 화면에 나타남.

 

const number = 0;
return number && <div> count : {number} <div>

 

위 코드 실행 시 count 숫자를 보여주는 게 아닌 숫자 0을 보여준다.

 


 

4. undefined 렌더링 하지 않기

 

리액트에서는 undefined를 렌더링하면 안된다.

 

function App(){
	const name = undefined;
    return name;
}

 

단, JSX 내부에서 undefined를 렌더링 하는 건 오류 나지 않음.

 

function App(){
	const name = undefined;
    return {
    	<div>{name}</div>
    }
}

 

OR 연산자를 통해 방지해보자.

 

function App(){
	const name = undefined;
    return name || '값은 undefined가 될 수 없음';
}

 


 

5. HTML에서 스타일을 지정할 때 background-color와 같이 - 를 사용하는 이름을, JSX에서는 카멜 표기법으로 작성한다.

 

function App(){
	const style = {
    	backgroundColor : 'white',
        fontSize : '10px',
        fontWeight : 'blod'
    }
    
    return (
    	<div style={style}> 테스트 </div>
    )
}

 


 

6. JSX에서는 HTML과 달리 class이름을 지정할 때 className으로 지정한다.

 

<div className="jsxTest"></div> // JSX
<div class="HtmlTest"></div> //HTML

 


 

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

 

<input/>
<input></input>

 


 

8. 주석 작성 법

 

  • JSX 내에서 주석을 작성할 때는 {/*...*/}와 같은 형식으로 작성한다.
  • 시작 태그를 여러 줄로 작성 시, 그 내부에서 //를 사용하여 주석을 사용할 수 있다.
<div>
	clasName="jsxTest" // 주석 가능 ~
</div>

'SPA > React' 카테고리의 다른 글

React Router  (0) 2022.11.21
React Effect Hook  (0) 2022.11.07
React Props 그리고 vue에는 없는 신기한 함수  (0) 2022.11.01
React State  (0) 2022.10.26
vanilla.js vs react.js  (0) 2022.10.19