//1. 양 쪽 대괄호 [ ]를 제거 할 수 있다.
let a = [1, 2, 3]
console.log(...a) // 1 2 3
//2. 새로운 배열을 만들어 줄 수 있다.
let a = [1, 2, 3]
let b = [...a] // b는 새로운 배열
//3. 두 개의 배열을 합칠 수 있다.
let a = [1, 2, 3]
let b = [4, 5, 6]
let c = [...a, ...b] // [1, 2, 3, 4, 5, 6]
console.log(c)
왜 사용 할까 🤔❔
객체 타입의 특이한 복사 방식 때문이다.
//b에 a를 넣어주는데 a[0]=100해줘버리면 b[0]까지 바뀌어 버린다.
let a = [1, 2, 3]
let b = a
a[0] = 100
console.log(a) // [100, 2, 3]
console.log(b) // [100, 2, 3]
//spread operator를 사용해주면?
let a = [1, 2, 3]
let b = [...a]
a[0] = 100;
console.log(a) // [100, 2, 3]
console.log(b) // [1, 2, 3]
객체에 적용한 예시를 좀 더 살펴보자
let a = { a: 1 , b: 2 }
console.log(...a) // { a: 1, b: 1 }
// Uncaught TypeError: Spread syntax requires
// ...iterable[Symbol.iterator] to be a function
// at <anonymous>:1:9
// (익명) @ VM2572:1
//a: 1, b: 2 라는 문법은 없기 때문
console.log({...a}) // 이렇게 작성해서 새로운 객체를 만들어줍니다.
// { a: 1 , b: 2 }
let a = { a: 1 , b: 2 }
let b = { ...a }
console.log(b) // { a: 1, b: 2 }
let a = { a: 1, b: 2 }
let b = { c: 3, d: 4 }
let c = {...a, ...b}
console.log(c); // { a: 1, b: 2, c: 3, d: 4 }
let 첫번째 = { a: 1, b: 2 }
let 두번째 = { ...첫번째, a: 3 }
// { b: 2, a: 3 }
두번째.a
console.log(첫번째)
//key(키)가 겹치면 뒤의 키 & 값으로 대체됩니다.
이걸 실전으로 예시를 해보면 ,
const products = [
{
브랜드: "수아레",
상품명: "케이블 카라 반팔 니트 - 6 Color",
가격: 39900,
},
{
브랜드: "커버낫",
상품명: "에센셜 어쩌고",
가격: 34300,
},
];
const newProducts = products.map((product) => {
return {
브랜드: product.브랜드,
상품명: product.상품명,
가격: product.가격 * 0.8,
};
});
console.log(newProducts);
//이걸 spread operator를 사용해서 바꿔보자
cosnt newProducts = product.map(product => {
return {...product, 가격: product.가격 * 0.8};
});
배열, 객체 안의 데이터를 뽑아 쓰다.
//아래 배열에서 "강아지"는 dog라는 변수에, "고양이"는 cat이라는 변수에 넣으려면?
const 동물리스트 = ["강아지", "고양이"];
const dog = 동물리스트[0];
const cat = 동물리스트[1];
// 이걸 구조 분해 할당하면
const ["dog","cat"] = 동물리스트;
//아래 객체에서 "멋진셔츠"는 상품명이라는 변수에, 10000은 가격이라는 변수에 넣으려면?
const product = {
상품명: "멋진셔츠",
가격: 10000,
}
const 상품명 = product.상품명;
const 가격 = product.가격;
const { 가격, 상품명 } = product;
기억할 것: fetch는 Promise를 return 하는 함수이다.
fetch: 외부에서 데이터(정보)를 가져오는 함수
왜 사용 할까 🤔❔
.then
을 통해 오래 걸리는 작업이 끝나면 .then()
함수로 결과가 전달되게 만든 것입니다.console.log("시작")
fetch("https://jsonplaceholder.typicode.com/todos/1")
.then((response) => {
return response.json();
})
.then((data) => {
console.log(data); // 2. 얘는 나중에 출력됩니다.
});
console.log("fetch 끝났니?"); // 1. 얘가 먼저 출력되고
fetch 작성법
fetch(주소).then((파라미터이름) => {
return 파라미터이름.json();
}).then((필요한데이터) => {
// 데이터 사용
console.log(필요한데이터)
})
**<문서>**
fetch("https://jsonplaceholder.typicode.com/posts")
.then((response) => {
return response.json();
})
.then((data) => {
console.log(data)
})
//연습1. 게시물 1개 가져오기
fetch("https://jsonplaceholder.typicode.com/posts/1")
.then((response) => {
return response.json();
})
.then((data) => {
console.log(data)
})
//연습2. 댓글(comments) 500개 가져오기
fetch("https://jsonplaceholder.typicode.com/comments")
.then((response) => {
return response.json();
})
.then((data) => {
console.log(data)
})
options는 뭔데🤔❔
const options = {
method: "GET",
headers: {
accept: "application/json",
Authorization:
"Bearer eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJmOGE3YjI2ZmRmZmFiYmVjMjNhZWE0NjZkMzFkODM2NSIsIm5iZiI6MTcyOTU3OTAwMi43Nzc1MzgsInN1YiI6IjY0NzFhM2NmYTE5OWE2MDBmOTQxZjlhYyIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.H2-DM_YlyvlwTr4KI-xacY2oeCrSVxybY2tRcPFRhwU",
},
};
fetch(
"https://api.themoviedb.org/3/movie/upcoming?language=en-US&page=1",
options
)
.then((res) => res.json())
.then((res) => console.log(res))
.catch((err) => console.error(err));
백엔드 개발자가 추가적인 정보를 요청한 경우에 넣는다.
fetch("https://jsonplaceholder.typicode.com/posts", { method: "GET" })
// method 생략 가능
fetch("https://jsonplaceholder.typicode.com/posts")
>작성법
fetch의 두 번째 인자로 넣습니다.
fetch(주소, { method: "GET", headers: { ... } })
headers
accept: "application/json": 서버에게 JSON 형식의 응답을 요청한다
Authorization: 인증 정보 넣는 곳 (없을 때도 있음)
+ POST
- 주소: **/posts**
- 게시물들(/posts)에 데이터를 **추가(POST)**한다
- POST 메소드는 **body**를 넣을 수 있음
- **body**에 추가할 **데이터**를 넣는다.
```javascript
fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST',
body: JSON.stringify({
title: 'foo',
body: 'bar',
userId: 1,
}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
})
.then((response) => response.json())
.then((json) => console.log(json));
```javascript
fetch('https://jsonplaceholder.typicode.com/posts/1', {
+ PATCH
- 주소: **/posts/1**
- id가 1인 게시물(/posts/1)을 **일부 수정(PATCH)**한다.
- PATCH 메소드는 **body를 넣을 수 있음**
- title만 수정
```javascript
fetch('https://jsonplaceholder.typicode.com/posts/1', {
method: 'PATCH',
body: JSON.stringify({
title: 'foo',
}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
})
.then((response) => response.json())
.then((json) => console.log(json));
```javascript
fetch('https://jsonplaceholder.typicode.com/posts/1', {
=> 하지만 메서드는 약속일 뿐 !!!!!!!!!!