Script

JSX 본문

항해99/3주차 주특기 기초

JSX

scripter. 2022. 7. 23. 10:16

1.JSX란?

 

컴포넌트는 마치 HTML 태그를 쓰듯이 사용하여 화면에 보여지게 할 수 있다.

이렇게 함수로 만들어진 컴포넌트르 html 태그 사용하듯이 코드를 작성하는 이 방식을 JSX라고 한다.

// import [패키지명] from [경로] 이 형식으로 불러와요.
import React from 'react'; 
// js 파일 뿐 아니라 이미지도 가능가능!
import logo from './logo.svg';
// css? 가능!
import './App.css';

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edit <code>src/App.js</code> and save to reload.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          Learn React
        </a>
      </header>
    </div>
  );
}

export default App;

리액트에는 딱 하나의 html 파일만 존재한다.( public 폴더 아래에 있는 index.html )

그럼 리액트에서는 어떻게 뷰를 그릴까?

JSX 문법을 사용해서 React 요소를 만들고 DOM에 렌더링 시켜서 그린다.

 

HTML을 품은 JS === JSX라고 할 수 있다.

원래 다음과 같은 HTML 태그는 .js 파일 안에서 쓸 수 없다.

<div>
	<h1>안녕하세요!</h1> 
	<p>OOO입니다</p>
</div>

 

그래서 나온게 JSX이다.

자바스크립트 파일 안에서 html 태그같은 마크업을 넣어 뷰 작업을 편하게 할 수 있게되었다.

const start_half = <div>
    <h1>안녕하세요!</h1>
    <p>OOO 입니다.</p>
  </div>;

 

2.JSX 사용법

 

2-1.태그는 반드시 닫아줄 것

 

잘못된 예시)

import React from 'react';

// input 태그를 닫지 않고 넣어볼 것이다
function App() {
  return (
    <div className="App">
      <input type='text'>
    </div>
  );
}

export default App;

위와같이 입력하면 오류가 발생한다. 

JSX 내에서 태그를 사용할때는 반드시 닫아주어야 한다.

 

input 태그를 아래와 같이 닫아보자.

<input type='text'/>

옳은 예시)

import React from 'react';

function App() {
  return (
    <div className="App">
      <input type='text'/>
    </div>
  );
}

export default App;

 

2-2.컴포넌트 안에는 한개의 엘리먼트만!

 

잘못된 예시)

import React from 'react'; 

function App() {
  return (
    <p>안녕하세요!</p>

    <div className="App">
      <input type='text'/>
    </div>
  );
}


export default App;

다음과 같이 입력하면 오류가 나는 것을 볼 수 있다.

return안에는 각각 p태그와 div 태그가 따로 놓여져 있다. 즉,엘리먼트가 2개로 놓여진 것이다.

 

하지만 하나의 컴포넌트 안에는 한개의 엘리먼트만 가질 수 있다. 

따라서 아래와 같이 바꿔주면 정상출력 되는 것을 볼 수 있다.

 

옳은 예시)

import React from 'react'; 

function App() {
  return (

    <div className="App">
          <p>안녕하세요!</p>
      <input type='text'/>
    </div>
  );
}


export default App;

<div> 태그안에 <p>태그를 넣어 엘리먼트를 하나로 통합시켜준 모습.

 

2-3.JSX에서 javascript 값을 가져오려면?

 

중괄호를 쓰면된다.

 

import React from 'react'; 

function App() {
	const cat_name = 'perl';
    return (
      <div>
        hello {cat_name}!
      </div>
    );
}


export default App;

hello {cat_name} => hello perl 로 출력될 것이다.

 

중괄호를 이용해서 자바스크립트 문법도 사용할 수 있다.

import React from 'react';

function App() {
  const number = 1;

  return (
    <div className="App">
      {/* JSX 내에서 코드 주석은 이렇게 쓴다 */}
      {/* 삼항 연산자를 사용 */}
      <p>{number > 10 ? number+'은 10보다 크다': number+'은 10보다 작다'}</p>
    </div>
  );
}

export default App;

1은 10보다 작다 가 출력될 것이다.

 

2-4.class 대신 className

<div className="App">

JSX로 작성하는 태그 내에서 클래스 명을 정해줄 때는 속성 값을 class 대신 calssName으로 사용한다.

id는 그냥 id를 사용.

 

2-5.인라인으로 style 주기

html 태그에 스타일을 직접 넣던 것과 비슷하다.

 

방법1.

// 중괄호를 두 번 쓰는 이유? 딕셔너리도 자바스크립트이기 때문!
<p style={{color: 'orange', fontSize: '20px'}}>orange</p>

방법2.

//혹은 스타일 딕셔너리를 변수로 만들고 쓸 수 있다!
function App() {
  const styles = {
    color: 'orange',
    fontSize: '20px'
  };

  return (
    <div className="App">
      <p style={styles}>orange</p>
    </div>
  );
}

 

'항해99 > 3주차 주특기 기초' 카테고리의 다른 글

State  (0) 2022.07.25
구조분해 할당과 Props / default Props  (0) 2022.07.23
Props.children  (0) 2022.07.23
Props  (0) 2022.07.23
Component  (0) 2022.07.23
Comments