개발공부/REACT

JSX의 정의와 역할 [처음 만난 리액트 #9]

sohee! 2023. 1. 26. 01:12

3강. JSX

 

[무료] 처음 만난 리액트(React) - 인프런 | 강의

자바스크립트와 CSS 기초 문법과 함께 리액트의 기초를 탄탄하게 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com


JSX란?

● JavaScript를 줄여서 JS라고 많이 표기함 -> JSX는 JavaScript와 연관이 있음 

A syntax extension to JavaScript 자바스크립트의 확장 문법

JavaScript + XML/HTML

 

JSX 코드

 

const element = <h1>Hello, world!</h1>;

 

 대입연산자 = : 오른쪽에 있는 값을 왼쪽의 변수에 대입하는 역할

= 왼쪽의 자료형 const와 변수명 element는 흔히 사용하는 JavaScript 문법

 = 오른쪽에는 HTML 코드 (<h1> 태그를 사용하였고 Hello,world!라는 문자열을 값으로 가짐)

 

-> JavaScript 코드와 HTML 코드가 결합되어있는 JSX 코드!

<h1> 태그로 둘러싸인 문자열을 element라는 변수에 저장하는 역할의 코드

 


JSX의 역할 

JSX는 내부적으로 XML/HTML 코드를 JavaScript로 변환하는 과정을 거치게 됨

실제로 우리가 JSX 코드를 작성해도 최종적으로는 JavaScript 코드가 나오게 되는 것

 

JSX 코드를 JavaScript로 변환하는 역할을 하는 것이 React의 createElement라는 함수 

 

JSX를 사용한 코드

 

class Hello extends React.Component {
    render() {
        return <div>Hello {this.props.toWhat}</div>;
    }
}

ReactDOM.render(
    <Hello toWhat="World" />,
    document.getElementById('root')
);

 

Hello라는 이름을 가진 리액트 컴포넌트가 나오고, 컴포넌트 내부에서 JavaScript 코드와 HTML 코드가 결합된 JSX를 사용하고 있음

Hello 컴포넌트를 reactDOM에 render 함수를 사용해 실제 화면에 렌더링

 

JSX를 사용하지 않은 코드

 

class Hello extends React.Component {
    render() {
        return React.createElement('div', null, 'Hello ${this.props.toWhat}');
    }
}

ReactDom.render(
    React.createElement(Hello, { toWhat: 'World' }, null),
    document.getElementById('root')
);

 

JSX 코드를 사용하지 않고 순수한 JavaScript 코드만을 사용해서 위의 코드와 동일한 역할

Hello 컴포넌트 내부에서 JSX를 사용했던 부분이 React.createElement 함수로 대체

 

=> JSX를 사용하면 리액트에서는 내부적으로 createElement 함수를 사용하도록 변환

최종적으로는 createElement 함수를 호출한 결과로 JavaScript 객체가 나오게 됨 

 


JSX를 사용한 코드

 

const element = (
    <h1 className="greeting">
        Hello, world!
    </h1>

 

JSX를 사용하지 않은 코드

 

const element = React.createElemenet(
    'h1',
    { className: 'greeting' },
    'Hello, world!'
)

 

-> JSX를 사용한 코드, 사용하지 않은 코드 모두 동일한 역할

JSX를 사용한 코드도 내부적으로는 createElement 함수를 사용하도록 변환되기 때문

 

createElement 함수 호출의 결과로 아래와 같은 JavaScript 객체가 생성됨

 

const element = {
    type: 'h1',
    props: {
        className: 'greeting',
        children: 'Hello, world!'
    }
}

 

리액트는 이 객체들을 읽어서 DOM을 만드는데 사용하고 항상 최신 상태로 유지

: 이 객체를 element라고 부름 

(createElement 함수는 element를 생성해서 리턴)

 

createElement 함수의 파라미터

 

React.createElement(
    type,
    [props];
    [...children]
)

 

type: element의 유형 (div나 span 같은 HTML 태그가 올 수도 있고, 다른 리액트 컴포넌트가 올 수도 있음)

● props: 속성들

● children: 현재 element가 포함하고 있는 자식 element

 

 

리액트에서 JSX를 쓰는 것이 필수는 아님!

직접 모든 코드를 createElement 함수를 사용해서 개발하면 되기 때문

but JSX를 사용하면 장점들이 많기 때문에 편리함