감정일기를 만들며 배우는 리액트(React) [2] - 자바스크립트 응용

강준호·2024년 1월 18일

리액트

목록 보기
2/18
post-thumbnail

Truthy & Falsy

let a = "string" //True
let a = [] //True



let a = ""; //False
let a = null; //False
let a = undefined //False
let  a = 0; //False

조건문 응용

const meal = {
  한식: "불고기",
  중식: "멘보샤",
  일식: "초밥",
  양식: "스테이크",
};

const getMeal = (mealType) => {
  return meal[mealType] || "굶기";
};


배열의 비구조화 할당

  • 인덱스가 아닌 '키' 값을 기준으로 할당
let arr = ["one", "two", "three"];

let [one, two, three] = arr;
console.log(one, two, three);
  • 순서대로 배열의 변수에 값 할당
  • 이름을 바꿔서도 사용가능.

비구조화를 이용한 스왑

let a =10;
let b = 20;
[a,b] = [b,a];

console.log(a,b)

스프레드 연산자(...)

const cookie = {
  base: "cookie",
  madeIn: "korea",
};

const chocochipCookie = {
  ...cookie, //객체의 프로퍼티를 펼쳐줌
  toping: "chocochip",
};
const allCookies = [...noTopingCookies, ...topingCookies];
  • concat 처럼 배열을 합칠 수도 있음

동기 & 비동기

동기

  • 블로킹 방식

비동기

  • 논블로킹 방식
  • 먼저 작성된 코드의 결과를 기다리지 않고 바로 다음 코드를 동시에 실행

=> 그럼 작업이 다 끝났는지는 어떻게 알지??

콜백함수를 이용한다!

  • setTimeout() 을 통해 비동기도

비동기의 콜스택 (코드 실행부분)

    1. setTimeout() 는 비동기이기 때문에, web APi 로 보내서 나머지 콜스택들이 다음 작업 할 수 있게 유지.
    1. 타임아웃 비동기 다 끝나면 콜백 큐로 옮겨져서 옮겨짐.
    1. 이벤트루프가 콜백스택에 Main 외에 아무것도 없다면 콜백큐에서 cb() 옮겨줘.

비동기 처리의 작업을 비동기처리에 넣어서... => 콜백지옥...

Promise

  • 비동기 작업이 성공(해결)했다 = resolve
  • 비동기 작업이 실패(거부)했다 = rejected
function taskA(a) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const res = a * 2;
      resolve(res);
    }, 1000);
  });
}
  • 이 함수는 비동기 작업을 하고, 그 반환값을 promise 로 반환받아서 사용할 수 있다

  • 그리고 then을 사용해서 적용.

... 근데 좀 어려워ㅜ


콜백함수

  • 함수안에 매개변수로 함수넣기!

  • 안정적으로 순차실행이 되게 해준다.

  • 근데 코드가 길어지면 이해가 어려워...

=> Promise 를 사용하자!

  • Promise 도 복잡하다...
    => async/ await 사용하자!

async & await

async

await

  • 비동기 함수가 동기함수처럼 수행
async function helloAsync() {
  await delay(3000);
  return "hello asynce";
}

async function main() {
  const res = await helloAsync();
  console.log(res);
}

main();

API

promise = 비동기 처리를 하는 함수.

이 처리의 함수결과는 then 을 통해서 사용

async function getData(){
    let rawResponse = await fetch("https://jsonplaceholder.typicode.com/posts");
    let jsonResponse = await rawResponse.json();
    console.log(jsonResponse);

} 
getData();

0개의 댓글