입문자들을 JS의 핵심내용들을 공부하고 넘어오지 않기 때문에
물론 저도 그랬구요
JS로 라우팅을 구현해본다던가, JS로 컴포넌트를 만들어본다던가 그런 것들을 안 해봐서
HTML 태그들을 리액트에서 사용해보게 되니까 많이들 **HTML파일을 리액트에서 JS로 처리해서 보여주는 건가?**하는 생각을 하는 것을 저는 몇몇 경우 볼 수 있었습니다. 이 경우, 이런 혼란을 해결하려면, 리액트가 어떤 식으로 DOM조작을 해내는지를 정확히 파악해야합니다.
많이들 들어봤을겁니다. JSX에 대해서..
JSX는 리액트에서 사용하는 특수한 문법입니다. JSX라는 문법을 통해 JS파일 내부에서 HTML마크업 구조를 작성할 수 있는 것이죠.
JS파일 내부에서 HTML마크업 구조를 작성한다…. 생각해보면 말이 안 됩니다. **파일 확장자를 .html로 안 썼는데 어떻게 브라우저가 해석을 하는거지?**와 같은 의문이 들 수 있을 겁니다.
분명 JSX 문법은 JS파일 안에 작성되었습니다. 그렇다면, 우리가 아는 JS문법들로 DOM을 조작하는 겁니다. 여기서 우리가 아는 DOM조작하는 JS문법들은
같은 문법들이죠? 이런 기본적인 문법들로 JSX문법을 해석해 HTML파일을 조작하는 겁니다. 그렇다면 우리는 분명 마크업 구조로 리턴하는데 이걸 해석해내는 걸까요? 중간 과정에 도구가 존재하는 겁니다. 바로 Babel이라는 트랜스파일러입니다.
길게는 안 적겠지만, 마크업 구조를 바벨에서 트랜스파일링을 통해React.createElement(tag-name, property-object, child-node)
형태로 바꿔줍니다.
이렇게 변형함으로써, 브라우저가 해석할 수 있게되고 리액트를 사용할 수 있게되어 DOM조작을 하는겁니다.
리액트는 JS라이브러리입니다. 전부 우리가 아는 JS문법들을 통해서 데이터화시켜서 우리가 아는 DOM조작 문법들로 바벨을 통해 트랜스파일링하여 하나의 HTML파일에서 동적으로 화면을 그려내는 겁니다.