Skip to content

Commit e588784

Browse files
committed
portal folder 추가
1 parent 5980118 commit e588784

File tree

6 files changed

+54
-2
lines changed

6 files changed

+54
-2
lines changed

optimizing-performance/peanut-lover/README.md

+54-2
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,58 @@ Intersaction Observer와 같은 기술도 있으니 충분히 그럴 듯해보
162162

163163
위 3가지 정도로 정리할 수 있을 듯합니다.
164164

165-
# 데이터를 Mutating 하지않는 것의 힘.
165+
# 데이터를 Mutating 하지 않아야한다.?
166166

167-
(정리중...)
167+
reconcilation 문제를 피하기 위한 가장 간단한 방법은 우리가 `state``props`로 사용하고 있는 값의 수정을 피하는 것입니다.
168+
169+
리액트에 익숙한 분들이면 아시겠지만 값의 변화를 비교하는 방식은 **얕은 비교** 입니다.
170+
171+
그래서 복잡한 객체타입의 상태를 가지고 있다면 변화된 부분만 교체하는 것이 하위 컴포넌트들의 리렌더링을 최소화하는 방법이 될 것입니다.
172+
173+
```js
174+
handleClick() {
175+
this.setState(state => ({
176+
words: state.words.concat(['markler'])
177+
}));
178+
}
179+
```
180+
181+
예를들어 위와같이 상태를 변경할 때 기존 값들에 `markler`이라는 단어를 추가만 해서 새로운 배열을 돌려주는 `concat` 함수를 이용할 수 있습니다.
182+
183+
보다 편하게 사용하기 위해서 ES6는 배열을 보다 쉽게 생성하기 위해 `spread` 문법을 제공합니다.
184+
185+
```js
186+
handleClick() {
187+
this.setState(state => ({
188+
words: [...state.words, 'marklar']
189+
}))
190+
}
191+
```
192+
193+
### 지양해야할 방식 (data를 직접 mutate하는 방식)
194+
195+
흔히 함수형 프로그래밍을 하지않는 언어들에서 데이터를 직접 수정하는 방식을 간혹 많이 사용합니다. 하지만 리액트에서는 그렇게하면 가독성 저하나 불필요한 리렌더링을 발생시킬수있습니다. 아래처럼. 순수하지않는 함수를 작성해서는 안됩니다.
196+
197+
```js
198+
function updateColorMap(colormap) {
199+
colormap.right = "blue";
200+
}
201+
```
202+
203+
기존 객체를 수정없이 작업하기 위해서 `Object.assign`를 사용하면 수정되는 부분만 수정 혹은 추가된 새로운 객체를 생성하게 됩니다.=
204+
205+
```js
206+
function updateColorMap(colormap) {
207+
return Object.assign({}, colormap, { right: "blue" });
208+
}
209+
```
210+
211+
`updateColorMap` 함수는 기존의 객체를 수정하기보다는 새로운 객체를 생성해냅니다. 배열의 spread 연산자와 같은 맥락으로 `Object spread`문도은 수정없이 객체들을 변경하기 쉽게 해줍니다.
212+
213+
```js
214+
function updateColorMap(colorMap) {
215+
return { ...colormap, right: "blue" };
216+
}
217+
```
218+
219+
위 기능은 ES2018에 추가된 기능입니다. 문법을 사용하려면 바벨의 도움이 필요합니다.(CRA를 사용하면 기본적으로 사용가능합니다.)

portal/Seogeurim/.gitkeep

Whitespace-only changes.

portal/chaeeun037/.gitkeep

Whitespace-only changes.

portal/jiyong1/.gitkeep

Whitespace-only changes.

portal/jonghopark95/.gitkeep

Whitespace-only changes.

portal/peanut-lover/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)