Skip to content

Commit 0fb85c1

Browse files
committed
strict mode 이론 정리
1 parent a0448ca commit 0fb85c1

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

strict-mode/Seogeurim/.gitkeep

Whitespace-only changes.

strict-mode/Seogeurim/README.md

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Strict Mode
2+
3+
React의 Strict Mode를 통해 애플리케이션 내의 잠재적인 문제를 잡아낼 수 있다. 개발 모드에서만 활성화되며 프로덕션 빌드에는 영향을 끼치지 않는다.
4+
5+
`<React.StrictMode>` 컴포넌트로 특정 컴포넌트를 감싸면, 그 컴포넌트와 자손 컴포넌트에 대하여 Strict 모드 검사가 이뤄진다. 본 문서에서는 Strict Mode에서 어떤 부분을 주로 검사하는지 설명하고 있다.
6+
7+
### Identifying components with unsafe lifecycles
8+
9+
- unsafe lifecycle을 사용하는 클래스 컴포넌트 목록을 정리해 경고 로그를 출력한다.
10+
- 서드 파티 라이브러리를 사용한다면, unsafe lifecycle을 사용하지 않는 것에 대한 장담을 하기 어려운데 이 때 유용할 수 있다.
11+
- React의 concurrent 렌더링에 있어서 이점을 얻을 수 있다.
12+
13+
### Warning about legacy string ref API usage
14+
15+
- ref를 관리하는 방법 중 [문자열 ref는 권장되지 않는 방법](https://github.com/facebook/react/issues/1373)이었다.
16+
- React 16.3에서 객체 ref가 문자열 ref를 교체하는 용도로 나왔기 때문에, Strict 모드는 문자열 ref의 사용에 대해 경고한다.
17+
18+
### Warning about deprecated findDOMNode usage
19+
20+
- `findDOMNode`를 통해 부모가 자식의 DOM 노드 렌더링에까지 영향을 줄 가능성이 존재한다.
21+
- 추상화 레벨이 무너진다.
22+
- 리팩토링이 어려워진다.
23+
- ref를 넘겨주는 방식을 통해 DOM에 닿을 수 있기 때문에, `findDOMNode`는 권장되지 않으며 경고한다.
24+
25+
### Detecting unexpected side effects
26+
27+
개념적으로 React는 두 단계로 동작한다.
28+
29+
- **렌더링 단계(`render`)** : 어떤 변화가 필요한지 결정
30+
- **커밋 단계(`componentDidMount`/`componentDidUpdate`)** : 변경 사항을 반영
31+
32+
커밋 단계는 매우 빠르지만 렌더링 단계는 느릴 수 있다. 따라서 커밋하기 전에 렌더링 단계의 lifecycle 메서드를 여러 번 호출하거나, (에러 발생 또는 우선순위가 밀려) 아예 커밋을 하지 않을 수도 있는 위험이 있다.
33+
34+
이와 관련된 부작용이 일어나면, 메모리 누수 또는 잘못된 애플리케이션 상태와 같이 다양한 문제를 일으킬 가능성이 있다. Strict 모드가 자동으로 부작용을 찾아주는 것은 불가능하지만 좀 더 예측할 수 있게끔 만들어준다.
35+
36+
예를 들어,
37+
38+
```jsx
39+
class TopLevelRoute extends React.Component {
40+
constructor(props) {
41+
super(props);
42+
43+
SharedApplicationState.recordEvent('ExampleComponent');
44+
}
45+
}
46+
```
47+
48+
위 코드를 살펴보면 `SharedApplicationState.recordEvent`의 연산 결과가 계속 달라진다면 이 컴포넌트를 여러 번 인스턴스화했을 때 잘못된 애플리케이션 상태의 부작용으로 이어질 수 있다. 이렇게 컴포넌트의 `constructor`와 같은 메서드를 의도적으로 여러 번 호출하면 strict 모드가 찾아내도록 한다.
49+
50+
### Detecting legacy context API
51+
52+
Strict 모드에서는 레거시 context API 코드를 찾아 경고 메시지를 노출한다.

0 commit comments

Comments
 (0)