티스토리 뷰
[JavaScript] 구조 분해 할당(Destructuring assignment)
adore_voy 2020. 12. 15. 14:28리액트 훅으로 시작하는 개요
리액트 훅에 useState 라는 API가 있다.
useState는 최초의 상태값을 갱신해주는 역할을 한다.
아래와 같이 쓴다.
const [state, setState] = useState('default');
첫번째 state는 최초의 상태값이며 최초 값은 오른쪽 useState의 인자로 설정해준다.
setState는 그 다음 설정할 값들을 받는다. 디폴트에서 계속 1을 더한다거나 하는 것.
하지만 이 형태는 구조 분해 할당 이라는 문법을 이용해 만들어진 형태이다.
구조 분해 할당이 없다고 생각해보자.
그렇다면 useState API는 아래와 같은 형태 일 것이다.
const stateArr = useState('default');
const state = stateArr[0];
const setState = stateArr[1];
정확한 useState 구조를 확인하기 위해 app 함수에 useState()라고 첫번째 매개변수에 값을 아무것도 넣지 않고 콘솔에 찍어보았다.
정말 useState는 두 개의 원소로 이루어진 배열이었고, 첫번째 디폴트는 정의되지 않았다고 나온다.
배열에서의 구조 분해 할당
정한 변수에 해당 배열의 값을 하나씩 할당시켜보자.
const score = [85, 90, 95];
const [bplus, a, aplus] = score;
console.log(bplus); // 85
이는 사실 아래처럼 했어야 할 것이다.
const score = [85, 90, 95];
const bplus = score[0];
const a = score[1];
const aplus = score[2];
console.log(bplus); // 85
상당히 짧아졌다. 만약 이 score 배열이 사실 30개의 원소로 이루어졌다면?
최소 30줄로 적어야 할 일을 단 두 줄로 해결 가능하다는 것이다.
기본값 할당
그런데 만약에 특정 변수에는 값을 할당하지 않는다면?
그렇게 된다면 해당 변수의 값은 undefined가 뜰 것이다.
하지만 아래와 같은 방법으로 디폴트 값을 지정해줄 수 있다.
let arr = [1, 2, 3];
let [a = 'empty', b = 'empty', c = 'empty' , d = 'empty'] = arr;
console.log(a); // 1
console.log(d); // 'empty'
arr 원소의 숫자를 다 할당해버려 할당받을 수가 없는 변수 d는 undefined가 아닌 미리 지정해둔 empty가 할당된다.
반환 값 무시
나에겐 세 개의 원소가 있는 배열이 있다. 하지만, 해당 배열의 두 번째 요소는 빼고 변수에 할당시키고 싶다.
아래와 같이 할당한다.
const arr = [1, 2, 3];
const [first, ,third] = arr;
console.log(third); // 3
스프레드 연산자를 이용한 할당
스프레드 연산자는 '...'으로 배열의 모든 값을 한번에 할당하게 도와준다.
첫번째 변수는 첫번째 변수에 두고 나머지는 다 두번째 변수에 할당하고자 한다면 아래와 같이 한다.
const arr = [1, 2, 3, 4, 5];
const [a, ..._else] = arr;
console.log(a); // 1
console.log(_else); // [2, 3, 4, 5]
객체에서의 구조 분해 할당
객체의 구조 분해 할당은 형태가 비슷하지만 새로운 변수 이름으로 할당할 시 아래와 같이 이용한다.
let newObj = {first: 24, second: 'adorevoy'};
let {first: age, second: name} = newObj;
console.log(name); // 'adorevoy'
참고:
ko.javascript.info/destructuring-assignment
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
'Basic_Studies > JavaScript' 카테고리의 다른 글
[JavaScript] null, undefined, undeclared 차이 (0) | 2021.02.28 |
---|---|
[JavaScript] 모듈 export, import (0) | 2021.01.08 |
[JavaScript] 콜백함수(Call-back function) (0) | 2020.09.16 |
[JavaScript] 삼항연산자(Ternary operator) (0) | 2020.09.06 |
[JavaScript] 화살표 함수(Arrow Function) (0) | 2020.08.31 |
- Total
- Today
- Yesterday
- Til
- next.js 리다이렉트
- nuxt 공식문서 한글
- getserversideprops redirect
- 리액트 파라미터 넘기기
- 카페음료테스트
- bs4 크롤링
- 글래스모피즘 구현
- 화이팅
- 리액트
- 파이썬 정렬
- 리액트 라우터
- vscode venv
- react router
- 백준 10989 파이썬
- nextjs 파라미터 넘기기
- 자바스크립트
- 파이썬 크롤링
- 10989 파이썬
- 움직이는 글래스모피즘
- 파이썬 flask
- dvd 효과
- NextJS
- 리액트 스크롤
- 리액트 컴포넌트
- css 글래스모피즘
- nextjs 스크롤
- css marquee
- 글래스모피즘 애니메이션 구현
- nuxt 공식문서
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |