미루고 미뤄왔던 React 18 Document를 정독해보려한다.
지금부터 정리된 내용은 공식 문서의 모든 내용을 포함하지 않고 있으며, 내가 몰랐거나 꼭 알아야하는 중요한 부분만 정리해두었다.
JSX
‘./Profile.js’
가 좀더 native ES Module(→모듈 시스템을 가져올때 .js 파일 확장명을 붙이며, 앞에 슬래시를 포함해야한다.) 에 가깝다.Syntax | Export | Import |
---|---|---|
Default | export default function Button() {} | import Button from './Button.js'; |
Named | export function Button() {} | import { Button } from './Button.js'; |
특징 | ✓ 꼭 동일한 이름으로 import 안해도 OK | |
✓ 한 파일 당 하나만 선언 가능 | ✓ 반드시 동일한 이름으로 import | |
✓ 한 파일에 여러개 선언 가능 |
⚠️ 이름이 없는 ()=>{}
컴포넌트는 권장하지 않는다.
<img>
🙅♀️ <img/>
🙆♀️area-*
와 data-*
는 제외JSX는 HTML처럼 생겼지만, 실상은 plain Javascript object이다. 즉, 2개 이상의 object를 한번에 반환할 수 없다.
따라서 JSX에서는 다른 태그나 Fragment로 감싸 하나의 태그로 만들어 주어야한다.
→ React는 작성하는 컴포넌트가 모두 순수함수라고 가정한다.
🤔 그래서 함수형 컴포넌트를 공부하는구나..
(1) 처럼 작성시, 컴포넌트를 호출시마다 매번 다른 JSX 파일을 생성한다. 또한 매번 다른 output이 나오므로 순수함수가 아니다.
(2) 처럼 작성하는 것을 권장한다. 이때, 특정한 순서로 rendered 되는거은 아니다. 각각의 컴포넌트는 “스스로 생각”하며, 렌더링 중, 다른 component를 조정하거나 의존해서는 안된다.
TeaGathering
) 내에서 동일한 렌더링 중에 생성한 것이므로 위 예시는 순수함수라고 볼 수 있다.TeaGathering
밖의 코드에서는 어떤 일어나고 있는지 알 수 없다. 이를 “local mutation”이라 한다.root component
로 조건부 렌더링을 거쳐, 부모 컴포넌트가 각각 다른 자식 컴포넌트를 렌더링한다.inspirations.js
같은 import한 파일들도 함께 보여준다.위 렌더 트리, 모듈 종속성 트리에 의한 컴포넌트는 (
아마) 아래처럼 생겼을 것이다.