어제에 이어서!
오늘은 리액트(React)로 나만의 컴포넌트(Component) 만들기에 도전!
먼저, 주의해야할 것은 npm start
상태를 유지해야 한다는 점이다. 그렇지 않으면 localhost를 계속 유지할 수 없고 새로고침을 했을 때 'page not found'가 나오게 된다.
어제 작성한
App.js
파일에 있는 것은 HTML이 맞다.
index.js
파일을 다시 보면 HTML처럼 생긴 것이 보인다.<App />
이 그것인데, 이건 닮았긴 했지만 HTML이 아니다. 그럼 뭘까? 저게 바로 컴포넌트(Component)다. 컴포넌트는 그럼 뭘까?App.js
에 나와있듯 HTML을 반환하는 함수이다. 컴포넌트를 작성할 때는 HTML의 태그를 작성하듯이< />
이런 형식으로 써줘야 한다. 이처럼 자바스크립트와 HTML의 조합을 JSX라고 한다. JSX는 리액트에 특화된 개념이다. 즉, 다른 데서는 쓸모가 없다는 것:)
그럼 이제 나만의 컴포넌트
Minion
을 만들어보자.
src
폴더 아래Minion.js
라는 파일을 만든다. 컴포넌트를 작성할 때마다import React from "react";
를 반드시 써준다. 이걸 써주지 않으면 리액트는 여기에 jsx가 있는 컴포넌트를 사용한다는 것을 이해하지 못한다. 작성하는 함수명 역시 소문자가 아닌 대문자로 시작해준다.minion
이 아니라Minion
이다. 마지막으로 잊지 말아야할 것이export default Minion;
을 작성해주는 것이다.
export default Minion;
을 써주지 않으면 아래와 같이 나온다. 즉,Minion
은 선언되었지만export
하지 않아서 사용하지 않고 있다는 말이다.export
까지 해주었으니 컴포넌트가 완성되었다!
완성한 컴포넌트는 어떤 식으로 사용해야 할까? 처음의
<App />
처럼 사용해보자.index.js
파일에 작성한Minion
컴포넌트를import
해주고<Minion />
을 렌더해주었다. 결과는 어떻게 될까?
코드의 빨간 줄로 이미 예상했겠지만 컴파일에 실패한다. 왜 그럴까? 아래의 오류를 잘 읽어보면 알 수 있듯이 JSX를 인접하도록 하면 안되는 특징이 있기 때문이다. 즉, 리액트의 애플리케이션(application)에는 하나의 컴포넌트만을 렌더링해야 한다. 그 렌더링하는 하나의 컴포넌트가 여기서는
App
이기 때문에 또다른 컴포넌트를 렌더링하려면 우회하는 방법을 선택해야 한다.
그럼
Minion
컴포넌트를App
아래로 넣어보자.App.js
파일로 이동해서Minion
컴포넌트를import
해준다. 여기서./
는 디렉토리(directory)라는 뜻이다.Minion.js
와App.js
는 같은 디렉토리에 있기 때문에./
를 써준다. 마지막으로<div></div>
안에<Minion />
을 써주면 끝!
결과는!
오늘 컴포넌트를 만들면서 기억해야 할 것을 정리해 봤다.
App
을 제외한 컴포넌트는 모두 App
안으로 들어가야 한다. 그 안에 여러 개의 컴포넌트를 넣을 수 있고 그 컴포넌트 안에 또 여러개의 컴포넌트를 import
할 수 있다.