카테고리 없음

[리액트를 다루는 기술] 6. 컴포넌트 반복

Gilvert 2018. 10. 8. 17:57
728x90




1. map 함수 문법


- arr.map(callback, [arg])

- 함수의 파라미터

-> 처리하고 있는 요소

-> 요소의 index 값

-> 요소의 배열


- arg: callback 함수 내부에서 사용할 this 레퍼런스


2. ES6 문법

- const result = numbers.map(num = num * num)



3. Key 

- key가 없다면 가상 DOM을 비교하는 과정에서 리스트를 순차적으로 비교하면서 변화를 감지

- key가 있으면 이보다 효과적으로 변화를 알 수 있음

- key 값은 언제나 유일



4. 유동적인 데이터 랜더링


1) 초기 state 값 설정하기

2) 데이터 추가 기능 설정하기

3) 데이터 제거 기능 구현



1) 초기 state 설정하기

state = { names =['눈사람','눈알','눈싸움']}


2) 데이터 추가 기능 설정하기

- 편의상 name의 레퍼런스를 미리 만듬: const { name } = this.stae;


3) 데이터 제거 기능 구현


- names: { ...names.slice(0, index), ...names.slice(index+1, names.length)
* 전개 연산자( ... ) : ES6 문법,  ... 뒤에 위치한 배열을 그대로 꺼내서 배열에 복사하는 역할
-> let numbers = [1,2,3,4,5]
-> let moreNumbers = [... numbers, 6] -> 1,2,3,4,5,6

- onDoubleClick = {this.handleRemove()}  임의 함수에 파라미터(index)가 들어간다면
-> onDoubleClick = { ()  => this.handle Remove(index)}
-> 내부에서 함수를 새로 만들면 된다.


5. fileter 사용
- names: names.filter((item,i) => i !== index )
-> index  번째를 제외한 원소만 있는 새 배열 생성

6. 정리
- key 값 설정을 항상 주의, key 값은 항상 유일
- 배열을 직접 변형하는 것이 아니라 concat, slice, 전개연산자, filter함수 등을 사용해서 새로운 배열을 만든후, setState를 적용해야함








가우넷 구름 USB 충전식 양면 대용량 보조배터리 손난로, 단일 상품, 화이트



"파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음"