728x90
요약
- 운영중인 커머스어드민과 판매자센터의 React 버전을 올리는 리팩토링을 맡게 되었음
- 결과적으로 버전을 올리지 못했음
- React 버전을 올리는 게 문제가 된 것이 아니라 TypeScript 버전도 함께 올려야 하는 이슈가 발생
- 거의 모든 파일을 수정해야 하고 기존 3.7.5 버전에서 발생하고 있던 오류(동작하기에 고치지 않고 넘어갔던..)들이 대폭발 💣
- 혼자서 감당할 수 없었고 모든 기능들을 재검수할만큼의 자원이 없었음
- 협의 하에 Cancelled
React 16 / 17
v16
- return Array & string 가능
- Error Boundaries
- componentDidCatch 를 통해 에러 대응(클래스 컴포넌트에서만 사용 가능)
- 작아진 파일 사이즈 (32% 감소)
- react is 5.3 kb (2.2 kb gzipped), down from 20.7 kb (6.9 kb gzipped).
- react-dom is 103.7 kb (32.6 kb gzipped), down from 141 kb (42.9 kb gzipped).
- react + react-dom is 109 kb (34.8 kb gzipped), down from 161.7 kb (49.8 kb gzipped).
- Fragment 지원
- StrictMode
- 개발 환경에서만 실행되며 프로덕션에는 영향이 없음
- 새로운 생명주기 추가
- getDerivedStateFromProps (componentWillReceiveProps 대체)
- getSnapshotBeforeUpdate (componentWillUpdate 대체)
- 16.8.0 hook
v17
- 생명주기 일부 제거
- componentWillMount
- componentWillReceiveProps
- componentWillUpdate
- 16에서는 이벤트들을 document.addEventListener()로 수행했지만 17에서는 rootNode.addEventListener()를 호출함
- New JSX Transform
- react → react/jsx-runtime
- TypeScript supports the new JSX transform in v4.1 and up.
- onFocus(focusing), onBlur(focusout) 반영
⚡ React 16 → 17
- package.json 수정
"@types/react": "^17.0.3",
"@types/react-dom": "^17.0.3"
"react": "^17.0.2",
"react-dom": "^17.0.2",
- tsconfig.json 수정
// before
// <div /> -> React.createElement("div")
"jsx": "react"
// after
// <div /> -> _jsx("div", {}, void 0);
"jsx": "react-jsx"
New JSX Transform
old transform
// source code
import React from "react"
function App() {
return <h1>Hello World</h1>
}
// compiled code
import React from "react"
function App() {
return React.createElement("h1", null, "Hello world")
}
new transform
// source code
function App() {
return <h1>Hello World</h1>;
}
// compiled code
import {jsx as _jsx} from 'react/jsx-runtime';
function App() {
return _jsx('h1', { children: 'Hello world' });
}
- JSX 변환을 처리할 때 더이상 React.createElement 로 변환하지 않고 react 패키지 자체의 함수를 불러와서 동작하게 함
- 장점은 아래와 같다.
- JSX 관련 import가 필요하지 않음
- 컴파일된 번들 최종 크기가 약간 줄어듦
- React가 다른 버전으로 여러번 중복으로 설치되는 경우를 방지할 수 있음
⚠️ 에러가 발생한다면? (TypeScript)
- TypeScript는 new JSX transform을 v4.1 이상부터 지원하기 때문에 v.4.1 미만 버전을 사용하고 있다면 필히 버전을 올려줄 것!
참고
https://ko.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html
반응형
'개발 > React&Next.js' 카테고리의 다른 글
[React] Firebase 연동 + CRUD (2) (0) | 2023.06.16 |
---|---|
[React] Firebase 연동 + CRUD (1) (0) | 2023.06.13 |
[React] neo-async callback was already called (0) | 2022.07.04 |
[React] map을 Ramda forEach로 변경하기 (0) | 2022.05.09 |
yarn v1 hoisting (0) | 2022.05.03 |
댓글