state 안에 있는 배열에 변화를 주는 방법
1. concat
- 기존 배열을 그대로 두고 새 배열을 생성한다.
2. Immutability Helper
- 객체나 배열을 좀 더 쉽게 수정하게 해준다.
- 이것을 사용하기 위해서는 라이브러리를 사전 설치해줘야 한다.
- 설치 방법 : npm을 통한 설치
- $npm install --save react-addons-update
- import update from 'react-addons-update'
- 원소 추가
1 2 3 4 5 6 7 8 | this.setState({ list: update( this.state.list, { $push: [newObj, newObj2] } ); }); | cs |
- (줄 3) 첫 번째 인수 : 처리해야할 객체나 배열
- (줄 4~6) 두 번째 인수 : 처리명령을 지니고 있는 객체
- (줄 5) push를 통하여 list 배열에 newObj, newObj2를 추가
- 원소 제거
1 2 3 4 5 6 7 8 | this.setState({ list: update( this.state.list, { $splice: [[index, 1]] } ); }); | cs |
- (줄 5) index번째 아이템 부터 시작해서 1개의 데이터를 제거한다는 의미
- 원소 수정
1 2 3 4 5 6 7 8 9 10 11 | this.setState({ list: update( this.state.list, { [index]: { field: {$set: "value"}, field2: {$set: "value2"} } } ); }); | cs |
- (줄 5~8) index번째 아이템의 field, field2 값을 변경한다.
- 객체를 다룰 때에도 직접 접근하면 안된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | let object = { a: '1', b: '2', c: { d: '3', e: '4', f: { change_this_value: '0', this_stays_same: '6' } } } let changed = update(object, { c: { f: { change_this_value: { $set: '5' } } } } | cs |
- (줄 14~22) change_this_value값이 수정된다.
3. spread 연산자
- 사용하기 위해서는 라이브러리를 설치해줘야 한다.
- $npm install --save babel-preset-stage-0
- webpack.config.js 파일을 아래와 같이 수정해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | module:{ loaders: [ { test: /.js$/, loader: 'babel', exclude: /node_modules/, query: { cacheDirectory: true, presets: ['es2015', 'stage-0', 'react'], plugins: ["react-hot-loader/babel"] } } ] }, | cs |
- spread 연산자를 이용하여 값을 수정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | let object = { a: '1', b: '2', c: { d: '3', e: '4', f: { change_this_value: '0', this_stays_same: '6' } } } let changed = { ...object, b: "hi" }; | cs |
- (줄 14~17) b의 값이 수정된다.
- 값 수정의 또 다른 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | let object = { a: '1', b: '2', c: { d: '3', e: '4', f: { change_this_value: '0', this_stays_same: '6' } } } let changed = { ...object, c: { ...object.c, f: { ...object.c.f, change_this_value: '5' } } }; | cs |
- (줄 14~23) change_this_value값이 수정된다
- 배열 원소 추가
- 배열에서도 마찬가지로 spread 연산자 이용이 가능하다.
1 2 | let array = [1, 2, 3, 4, 5, 6]; let changed = [ ...array, 7]; | cs |
- changed 배열을 출력해보면 [1, 2, 3, 4, 5, 6, 7] 로 출력된다.
- 배열 원소 제거
1 2 | let array = [1, 2, 3, 4, 5, 6]; let changed = [ ...array.slice(0,2), ...array.slice(3,array.length)]; | cs |
- changed 배열을 출력해보면 3이 제거되어 [1, 2, 4, 5, 6] 로 출력된다.
- 배열 원소 수정
1 2 | let array = [1, 2, 3, 4, 5, 6]; let changed = [ ...array.slice(0,2), '수정', ...array.slice(3,array.length-1)]; | cs |
- changed 배열을 출력해보면 [1, 2, "수정", 4, 5, 6] 로 출력된다.
'Front-End > React.js' 카테고리의 다른 글
[ReactJS] 개발환경 설정, 프로젝트 진행 (0) | 2018.02.14 |
---|---|
[ReactJS] 컴포넌트 매핑(Component Mapping) (0) | 2018.01.13 |
[ReactJS] state (0) | 2018.01.11 |
[ReactJS] props (0) | 2018.01.11 |
[ReactJS] Codepen 설정, ES6 클래스, JSX의 특징 (0) | 2018.01.11 |