-
[React] 리액트 소개, 컴포넌트, JSX카테고리 없음 2020. 3. 2. 17:53
*리액트(React)
웹사이트에 넣을 수 있는 정보량이 많아지면 웹사이트는 빠른 속도로 복잡해진다. 이것은 무엇을 의미할까. 사이트 내 HTML 태그가 정보량과 함께 기하급수적으로 늘어난다는 것을 의미한다. 당장 페이스북에 들어가서 개발자도구를 켜보면 엄청난 양의 HTML태그가 있는 것을 확인할 수 있다. 말하자면 HTML태그를 효율적으로 관리할 수 있는 방법이 필요해지는 것이다.
만약 내가 반복해서 사용하는 HTML 태그를 한 덩어리에 담아 사용할 수 있다면 어떻게 될까. 말하자면 '사용자 정의 태그'를 만들어주는 것이다. 이 사용자 정의 태그를 사용하면 동일한 작업을 반복하지 않아도 될 뿐만 아니라(재사용성), 가독성이 좋아진다. 뿐만 아니라, 유지보수 또한 엄청나게 편해질 것이다.
리액트(React) 는 사용자 정의 태그를 만들어주는 여러가지 기술 중 하나로, 페이스북 UI를 잘 만들기 위해 페이스북에서 만든 UI 라이브러리다. 페이스북 뿐만 아니라 드롭박스, 마이크로소프트, 에어비앤비, 우버 등 여러 기업에서 리액트를 사용하고 있다.
* 리액트가 없다면
웹 페이지를 만들기 위해 아래와 같이 코드를 작성했다.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=<device-width>, initial-scale=1.0"> <title>Document</title> </head> <body> <header> <h1> WEB </h1> world wide web! </header> <nav> <ul> <li><a href="1.html">HTML</a></li> <li><a href="2.html">CSS</a></li> <li><a href="3.html">JAVASCRIPT</a></li> </ul> </nav> <article> <h2>HTML</h2> HTML is HyperTExt Markup Language </article> </body> </html>
저 정도는 할만할 수 있다. 하지만 같은 내용이 천만 번 나와야 한다면 어떻게 할까. 복사를 천만번 하면 될까. 코드를 수정할 때도 천만번 수정해야 할까?
* 컴포넌트 (Component)
컴포넌트란 '사용자 정의 태그' 를 의미한다. 내가 담고 싶은 태그 내용을 한 덩어리로 담아서 이를 정의한 후 활용하는 것이다. 컴포넌트 사용을 통해 가독성, 재사용성, 그리고 유지보수의 용이성이라는 이점을 취할 수 있다.
리액트의 컴포넌트를 사용해서 위 코드를 수정해보면 아래와 같다. 컴포넌트는 항상 대문자로 표기해야 한다. 소문자로 표기된 경우, 리액트는 이를 DOM 태그로 처리한다.
// 컴포넌트 정의. Compenent 라는 클래스를 상속받은 새로운 클래스 Subject를 만드는 것 class Subject extends Component { render(){ return ( // 컴포넌트를 만들때는 반드시 '하나의' 최상위 엘리먼트가 있어야 한다 <header> <h1> WEB </h1> world wide web! </header> ); } } class Nav extends Component { render(){ return( <nav> <ul> <li><a href="1.html">HTML</a></li> <li><a href="2.html">CSS</a></li> <li><a href="3.html">JAVASCRIPT</a></li> </ul> </nav> ); } } class Article extends Component { render(){ return( <article> <h2>HTML</h2> HTML is HyperTExt Markup Language </article> ); } } class App extends Component { render(){ return ( // 위에서 컴포넌트들을 정의했으므로 하나하나 쓰지 않고 컴포넌트들를 가져다 사용. <div> <Subject></Subject> <Nav></Nav> <Article></Article> </div> ) } }
정의된 컴포넌트들은 내용을 하나하나 쓸 필요 없이 컴포넌트들을 그대로 가져가서 쓸 수 있다. 프로젝트의 크기가 커질수록 컴포넌트의 사용이 빛을 발하는 것이다.
*JSX
그런데, 위의 코드를 크롬 콘솔에 찍어보면 실행이 되지 않는다. 잘 보면 태그를 표현한 부분에 자바스크립트처럼 따옴표, 역슬래시 등을 사용해 처리해주지 않고 그냥 쓴 것을 알 수 있다. 즉, 위 코드는 자바스크립트 코드가 아니다. 페이스북에서 만든 자바스크립트 확장 언어인 JSX이다.
리액트는 별도의 파일에 마크업과 로직을 분리해 넣는 대신, 이 둘을 포함하는 '컴포넌트' 유닛을 활용한다. 순수 자바스크립트로만으로 리액트를 사용할 수도 있지만, JSX를 사용하는 것이 자바스크립트 코드 안에서 UI관련 작업을 할 때 더 도움이 된다.
* Reference : 생활코딩 React (https://opentutorials.org/module/4058), 리액트 공식페이지(https://reactjs.org/)