React - JSX


JSX는 문법이다. html같이 생겼지만 javascript로 변환된다. HTML이랑 비슷하지만 지켜야 할 규칙이 몇가지 있다.

1. 꼭 닫혀야 하는 태그

<> 이런 식으로 태그를 열면 무조건 태그를 닫아야 한다.

<input type="text" /> 이런식으로 self closing tag를 달아주는 편이 좋다.

2. 두 개 이상의 element는 무조건 하나의 element로 감싸져야 한다.

<div></div>
<div></div>

이건 안된다. 근데 굳이 두개를 묶으려고 또 하나를 상위에 두는 것이 번거롭다. 이떄는 Fragment를 사용하면 된다.

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

<Fragment>
<div></div>
<div></div>
</Fragment>

3. JSX안에 자바스크립트 값 사용하기

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

class App extends Component{
  render(){
    const name = 'react';
    return{
      <div>
        hello {name} //이렇게 중괄호를 쓴다.
      </div>
    }
  }
}

조건부 렌더링

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

class App extends Component{
  render(){
    const name = 'react';
    const value = 1;
    return{
      <div>
        {
          1+1 === 2
            ? '맞다'
            : '틀리다!'
            
          name === 'react' && <div>리액트다</div> //and 연산자를 통해 조건부 렌더링을   있다.
          
          {function(){
            if(value ===1) return <div>1</div>
            if(value ===2) return <div>2</div>
            if(value ===3) return <div>3</div>
          }}()
          
          {()=>{
            if(value ===1) return <div>1</div>
            if(value ===2) return <div>2</div>
            if(value ===3) return <div>3</div>
          }}()
        }
      </div>
    }
  }
}

style

원래는 html에 style을 넣어줄 때는 문자열로 넣어줬다.

style을 사용하게 될 때는 객체 형태로 넣어주게 된다.

import React, { Component } from 'react';

class App extends Component{
  render(){
  
    const style = {
      backgroundColor: 'black', //기존에는 background-color였지만 이젠 새 단어마다 대문자.
      padding: '16px', //문자열 형식으로
      color: 'white',
      fontSize: 5+10+'px'
    };
    
    return{
      <div style={style}> //스타일 적용
      </div>
    }
  }
}

클래스

<div className="App"> //className이라 해야지 작동을 한다.

주석

JSX 내부에서는 //, /**/ 가 그대로 렌더링 되어 버린다.

{//JSX 내부에서는 이렇게 작성해야 한다.}
{/*dlfjgrpsk*/}
<h1 //아님 이렇게></h1>