23일차 / Diffing/Hydration, Closure, HOC/HOF

김혜진·2022년 4월 13일
0

Diffing / Hydration

F12 -> Application

세션 스토리지는 브라우저를 끄면 사라진다.
로컬 스토리지는 영구적으로 저장이 되어서 껐다 켜도 남아있다. 직접 삭제해야 함.

로컬 스토리지에 중요한 정보를 저장해두는 것은 좋지 않다.

액세스 토큰을 빼낼 수 있기 때문에 해킹당할 위험이 있음.
아직 리프레시 토큰을 배우지 않았기 때문에 일단 로컬 스토리지에 액세스 토큰을 담아두도록 하겠습니다.

새로고침 = 재접속
변수, State, globalState 등 새롭게 받아오니까 안이 비어지게 된다.
새로고침하면 항상 초기화가 되어 다운받아오게 된다.
그러면 다시 로그인을 해야되고...
그래서 임시로 로컬 스토리지에 브라우저를 껐다 켜도 액세스 토큰이 살아있게끔 해주겠다.

vsCode에서 로컬 스토리지를 입력하면 바로 나온다. => 브라우저에 이미 있는 것이기 때문에
.setItem => 만들어줘
.getItem => 가져와줘
.key => 키를 뽑아온다

  1. 로그인을 하면 액세스 토큰이 생기는지
  2. 로그인을 하면 페이지가 자동으로 넘어가는지
    확인을 해준다.

로컬 스토리지에 등록하면 브라우저를 껐다 켜도 액세스가 가능하게 된다!
(보안적으로 좋은 방법은 아님)

로컬 스토리지는 토큰이 안 사라지게 하는 수단에 불과하고

새로고침 했을 때 사라지지 않게 해주려면 로컬 스토리지에 있는 액세스 토큰을 글로벌 스테이트 리코일 스테이트에 다시 넣어주어야 한다.

토큰이 있으면 넣어주고 없으면 빈 문자열 보여줘.

브라우저에 주소를 치소 엔터를 치면 프론트엔드로 접속을 한다.
yarn dev라는 프로그램 자체에서 html,css,js를 주기 전에 프론트에서 소스코드를 한 번 돌려본다.
즉, 서버에서 그림을 한 번 그려보는 것 => prerendering
전체적인 큰 그림, 큰 구조만 그려본다. 그 다음에 html, css, js를 던져준다.
브라우저에서도 그림을 그리고, 프론트에서 그린 그림과 비교를 한다. => diffing
diffing 이후의 최종 완성형으로 업데이트 하는 것을 hydration이라고 한다.

중요한 것은 프리렌더링 할때는 로컬스토리지라는 개념이 없다.
이것들은 브라우저에 있는것이라 브라우저에서 그릴 때는 정상작동하지만
프론트 서버의 yarn dev라는 프로그램에서는 브라우저라는 개념이 없기때문에 localstroge. 이라고 찍으면 localstorage가 뭐냐? 하는 것이다.

웹 에디터 만들 때 하이드레이션의 문제가 발생 => 나중에 더 다루게 된다.

브라우저 접근 가능한 방법 = typeof window
윈도우가 없다면 = vsCode에서 실행되고 있다면

프리렌더링, 브라우저에서 두 번 실행이 되고 있다!
브라우저에서는 문제없지만 프리렌더링에서 localStorage가 뭐냐? 고 하는 이유.

useEffect는 브라우저에서 실행이 되는거니까, 사용해보자!

  useEffect(() => {
    const mylocalstorageAccessToken = localStorage.getItem("accessToken");
    setAccessToken(mylocalstorageAccessToken || "");
  });

이제 새로고침을 해도 액세스 토큰을 통해 정상적으로 데이터를 받아올 수 있다.

권한 분기

권한을 분리하는 방법!
1. 권한 별로 사이트를 다르게 하기
2.하나의 페이지에서 로그인 한 사람과 안 한 사람 나누기

Closure

함수 안의 함수를 리턴하기
리턴되는 함수의 이름은 전혀 중요하지 않다!

스코프 체인에 의해 안쪽에 있는 내부함수에서 바깥쪽에 있는 외부함수의 변수에 접근할 수 있는 것
내부 함수에서 외부 함수의 변수 (지역변수)에 접근할 수 있다.
apple이 들어가있는 영역 = closure

A 컴포넌트를 실행하기 전에 실행하는 컴포넌트
ex) MyPage에 접속하기 전에 권한 검증 컴포넌트가 실행

브레이크 포인트 설정하고 새로고침 하고

  1. 건너뛰기
  2. 하나씩 들어가기

콜스택에 실행되는 순서대로 함수가 쌓인다.
함수가 종료되면 콜스택에서 빠지게 된다.
어나니머스는 맨 처음에 있는 것

지역변수는 바나나
qqq와 banana 호이스팅되어서 선언됨

Closure에 apple이 들어간 모습

stack : 먼저 들어간 게 마지막에 빠진다. (First-In-Last-Out,FILO)
마지막에 들어간 게 먼저 빠진다. (Last-In-First-Out, LIFO) => 더 많이 쓰이는 말

queue : 먼저 들어간 게 먼저 빠진다. (First-In-First-Out, FIFO)
마지막에 들어간 게 마지막에 빠진다. (Last-In-Last-Out, LILO)

HOC / HOF

Bbb가 먼저 실행되게 하려면 ?

아까 했던 것과 동일하게,
파라미터의 이름만 바꿔준 형태

컴포넌트라는 곳에 bbb
props라는 곳에 qqq:철수가 들어감
스프레드: 저걸 그대로 다시 그린다.

원래대로 똑같이 Aaa에 있던 내용이 Bbb와 연결되고, 리턴이 되기 이전에 로직이 실행될 수 있게 만든다.

이 컴포넌트를 Higher Order Component라고 한다.

bbb라는 컴포넌트가 있었는데 이걸 실행시키기 전에 Hoc로 감싸서 export를 한다
Aaa에서 통째로 임포트해서 사용할 수 있게 된다.
Hoc라는 이름을 지우고 Bbb라는 이름으로(여기서 말하는 Bbb는 Hoc(Bbb)가 합쳐진 것) 임포트할 수 있다.

중괄호와 return 사이에 아무것도 없다면 화살표 함수로 바꿔줄 수 있다.

Hoc는 with라는 단어를 붙여서 많이 사용한다. (관례)
우리는 로그인(인증)여부를 검사하는 Hoc를 withAuth로 사용하겠다.
withAuth(Bbb)

<실습>

id 값은 중복될 수 있는 문제도 해결할 수 있다.

profile
알고 쓰자!

0개의 댓글