tevelop RSS 태그 관리 글쓰기 방명록
2021-10-17 18:48:29

 

 

 

사실 리액트를 쓸 줄은 알지만, 개념적으로는 자세히 알고 있지 못했다.

내가 머리 속으로 얼추 이해하고는 있는 개념이라도, 남에게 설명은 잘 못하겠다. 다시 한번 공부하며 개념을 정리해보자.

리액트 공식 문서를 읽어가며 정리!

 

https://ko.reactjs.org/docs/hello-world.html

 

Hello World – React

A JavaScript library for building user interfaces

ko.reactjs.org

 

리액트 - 사용자 인터페이스를 만들기 위한 JavaScript 라이브러리!

 


 

JSX란? 

const element = <h1>Hello, World!</h1>

JSX는 React의 요소를 생성한다.

 

React에서는 이벤트가 처리되고, 시간에 따라 state가 변하는 방식, 화면에 표시하기 위해 데이터가 준비되는 방식 등 렌더링 로직이 본질적으로 다른 UI로직과 연결된다.

별도의 파일에 마크업과 로직을 넣어 분리하는 대신, js와 마크업을 한번에 포함하는 컴포넌트라는 유닛으로 분리한다.

 

const something = ',,,';
const element = <h1>{something}</h1>;

ReactDOM.render(
  element,
  document.getElementyById('root')
)

JSX의 중괄호 {} 에는 JavaScript 표현식을 넣을 수 있다.

 

 

 

 

JSX도 표현식이다!

컴파일이 끝나면 JSX표현식은 일반 JavaScript 함수 호출로 되어 JavaScript 객체로 평가된다.

때문에, if나 for loop 내에서 JSX를 사용하고, 변수에 할당하고, 인수로 받아들여지고, 함수에서 반환할 수 있는 것이다.

function sayHello(user){
  if ( user ) {
    return <h1>Hello {user}</h1>;
  }
  
  return <h1>Hello Stranger</h1>;
}

 

 

 

 

JSX 속성 정의

// 1. 
const element = <div tabIndex="0"></div>;
// 2.
const element = <img src={srcUrl}></img>;
  1. 1의 방식으로 문자열 리터럴을 정의 할 수 있다.
  2. 중괄호를 사용해 속성에 JS표현식을 삽입할 수도 있다.
🔔  src = {""} 와 같이 중괄호 주변에 따옴표를 입력하지 않는다! 따옴표 또는 중괄호 중 하나만 사용해야한다.

🔔  JSX는 HTML 보다 JS에 가깝기 때문에 React DOM은 HTML 속성 이름 대신 camelCase 속성 명명 규칙을 사용한다! ex) class ⇒ className / tabindex ⇒tabIndex

 

 

 

 

JSX는 주입 공격을 방지한다

const title = response....;
const element = <h1>{title}</h1>;

기본적으로 React DOM은 JSX에 삽입된 모든 값을 렌더링 하기 전에 이스케이프 한다(인코딩한다(?) - 이스케이프 한다의 정의를 제대로 이해 못했다).

애플리케이션에 명시적으로 작성되지 않은 내용은 주입되지 않는다.

모든 항목은 렌더링 되기 전에 문자열로 변환된다.

이런 특성으로 인해 XSS(cross-site-scripting) 공격을 방지할 수 있다.

🔔  XSS(cross-site-scripting) 웹 사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점. ex) 게시판에 글을 등록 → 글의 내용에 악성 스크립트가 포함되어 글의 내용에 접근한 사람의 쿠키 등의 정보가 유출될 수 있다.

 

 

 

 

JSX는 객체를 표현한다.

Babel(현재 및 이전 브라우저 또는 환경에서 ECMAScript 2015+ 코드를 이전 버전과 호환되는 JavaScript 버전으로 변환하는데 사용되는 도구 모음)은 JSX를 React.createElement() 호출로 컴파일한다.

 

아래 두 예시는 동일.

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

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

React.createElement()는 버그가 없는 코드를 작성하는데 도움이 되도록 몇 가지 검사를 수행하며 다음과 같은 객체를 생성하게 된다.

// 다음의 구조는 단순화 되어 표현된 것
const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world!'
  }
}

이러한 객체를 React element 라고 하며, 화면에서 보고 싶은 것을 나타내는 표현이라 생각하면 된다.

React 는 이 객체를 읽어서, DOM을 구성하고 최신 상태로 유지하는데 사용한다.

 

 

 

 

tevelop. Designed by 코딩재개발.