사과먹는중
당근먹는하니
귀엽고 행복해
당근먹는하니
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 다람쥐🐿 (26)
    • C++ 공부빵야 (7)
    • 공부👻 (5)
    • 프론트엔드✏️ (228)
      • 코드캠프 (120)
      • 팀 프로젝트✨ (31)
      • 개인공부 (67)
    • 프론트엔드 - 바닐라js (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ssg
  • 코딩 부트캠프
  • HTML
  • 회고
  • algorithm
  • 팀 프로젝트
  • javascript
  • 공통 컴포넌트
  • javascrpit
  • React-hook-form
  • 팀프로젝트
  • 프로그래머스
  • 리액트
  • emotion
  • JS
  • 배포
  • 프론트엔드
  • react
  • next.js
  • 자바스크립트
  • 부트캠프
  • 배열
  • 코드캠프
  • 코딩
  • 알고리즘
  • CSS
  • typescript
  • refreshtoken
  • graphql
  • 팀플

최근 댓글

최근 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
당근먹는하니
프론트엔드✏️/코드캠프

220609 프론트엔드 부트캠프 30일차 : Diffing, Hydration, closure, HOC/HOF

220609 프론트엔드 부트캠프 30일차 : Diffing, Hydration, closure, HOC/HOF
프론트엔드✏️/코드캠프

220609 프론트엔드 부트캠프 30일차 : Diffing, Hydration, closure, HOC/HOF

2022. 6. 10. 00:35
728x90
반응형


일단...
커서를 커스텀하고 닿는 것에 따라서 효과를 주려고 했는데, 하진 못했다.
그냥 커서를 다른 이미지로 바꾸는 것만 성공..?~~! 근데 이것만으로도 기쁘다~
별안간 테스트 페이지를 만들고 싶어져서(사실 오랜 꿈이었음) 무턱대고 강의를 결제했다. 그랬더니 의욕이 상승했다,,, 아니 이런 얘기말구
어제부터 한 댓글 분리-수정 작업까지 완료.. 디폴트 밸류 안 들어오던 문제도 고쳤다.(그냥 props 안 내려줘서였다 ㅎㅎ)
동아리 져지 디자인도 한 시간 정도 함... 근데 져지 안 사봤고 안 입어봤고 아이디어도 안 떠오르고 보내준 디자인들만 보고 비슷하게 해보려 하는데 따라하긴 싫고 환장ㅠㅠ

오늘은 노션에 바로 정리한 것도 있어서 그냥 수업시간에 쓴 것 + 추가한 것 그대로 복붙

  localStorage, Next.js 렌더링 원리

state 변수에 담아놔서 없어지는 것
새로고침은 브라우저에서 해당 주소로 다시 enter를 친 것과 같고, 새로운 html, css, js를 다시 받아온다는 것→state 변수들이 날아감
브라우저의 로컬 스토리지에 담아놓도록 하겠음
이건 임시! 리프레쉬 토큰 배우기 전까지 쓸 것 (실무에서 쓰는 방식은 아니예요)

[브라우저 저장소]
쿠키(COOKIE) : 영구 저장 가능, 만료시간 지정 가능
localStorage : 영구 저장 가능. 여길 임시 저장소로 사용할 것임
sesstionStorage : 브라우저 종료시 사라진다.
개발자도구 → application → storage 부분을 보면 된다.

  • 저장할 때 : localstorage.setItem(”key” , ”value”)
  • 꺼내올 때 : localstorage.getItem(”key”)

Next.js 렌더링 방식 : 서버사이드 렌더링 방식
서버에서 페이지를 모두 그려준 후 브라우저로 보내주는 것

const [accessToken,setaccessToken] = useRecoilState(accessTokenState)

const onClickLogin = async()=>{
	try{
		cosnt result = await loginUser({
			variables:{
					email : email,
					password : password
				}
			})
			const accessToken = result.data?.loginUser.accessToken
			if(setAccessToken){setAccessToken(accessToken || "" )
				router.push('/loginsuccess')
				localStorage.setItem(accessToken:"accessToken")
			}
		}catch(error){
			// alert(error.message)을 사용하셔도 무방합니다.
			Modal.error({content : error.message})
		}
	} 

// 로그인 후 받아온 토큰을 브라우저에 저장하기 위해


브라우저가 아니라 서버에서 그리는 것(밑그림-프리 렌더링)
그 다음에 html, css, js 넘겨준다.

Diffing : 받은 그 페이지를 브라우저에서 그린 내용과 프론트엔드 서버에서 그린 것을 비교함
hydration : 비교 후 최종적으로 변경사항 적용

프리렌더링할 때 로컬스토리지 없으니까 없다고 에러메세지가 뜬 것
-> process.brower 조건이나 type of window !== 'undefined'를 줘서 실행되는 곳이 브라우저일 때만 localStorage에 접근하도록 한다.

ㅎㅎ.. 타자로 치다가 졸면 이렇게 되는군~

useEffect는 브라우저랑 친구친구
이걸 이용하면 화면을 한 번 그려준 후 실행시켜주어 문제를 해결할 수 있다.

  권한분기


특정 페이지는 로그인 한 사람이 접속 가능, 특정 페이지는 로그인 안 한 사람도 접속 가능하고…
이렇게 분기 시키는 것을 권한 분기라고 한다.

관리자 주소, 사장님 주소, 사용자 주소
관리자 사이트? 배달의 민족 직원들이 접속할 수 있는 사이트

사장님 접속하면 주소도 다르고
권한이 필요한 곳에 일일이 useEffect로 토큰이 없으면 페이지를 돌려보낼 수도 있지만, 그러려면 수정해야할 때 전부를 수정해야함. 유지 보수가 어렵다.
그래서, 하이오더컴포넌트(HOC-Higher Order Component)를 적용해야 한다.
페이지가 실행되기 전, withAuth라는 상위 컴포넌트를 실행하는 개념.
그 전에 closure를 이해해야 한다.

함수가 함수를 리턴하는 구조

function aaa() {
	console.log("안녕하세요 aaa입니다")
	return function bbb() {
		console.log("안녕하세요 bbb입니다")
	}
}

aaa();  // 안녕하세요 aaa 입니다, fbbb() { console.log("안녕하세요 bbb입니다") } 

// bbb를 실행시키고 싶다면,
aaa()();  // 안녕하세요 aaa 입니다, 안녕하세요 bbb입니다.

 

저 자리에 들어오는 것과 같다. 실행시키려면 () 하면 된다.

 

function aaa() {
	const apple = 3;
	console.log("안녕하세요 aaa입니다")
	return function bbb() {
		const banana = 10;
		console.log(apple); // bbb안에 apple없으면 밖에 나가서 찾음
		console.log("안녕하세요 bbb입니다")
	}
}

// bbb 의 { } 로컬스코프
// aaa 의 { } 클로저스코프

개발자도구 - Source

useEffect(() => {
    if (!localStorage.getItem("accessToken")) {
      // 있는지 없는지 찾아갖고 옴
      alert("로그인 후 이용 가능합니다!");
      router.push("/23-04-login-check");
    }
  }, []);

이걸 다 복사 붙여넣기? 그럼 수정할 때 너무 어려워져.
이거를 적용해주는 컴포넌트 하나있다고 한다면, 그 공통 컴포넌트가 페이지 실행되기 전에 한 번 실행되게 해준다면 문제가 해결되지 않을까?
위에서 먼저 실행된다 - Higher Order Component(HOC)

두번째 함수엔 이름이 필요없어! 아무거나 해도 되고 아예 빼도 된다.

aaa->HOC->bbb 순서로!

이건 클래스 컴포넌트에서 많이 쓰고, 함수형은 커스텀 훅 이용해서 훨씬 간단하게 쓸 수 있다.

HOC와 HOF는 Component와 Function의 차이.
JSX(React의 HTML)를 return 하면 Component, 그렇지 않으면 Function !

HOF의 장점 - 기존처럼 event.target.id 라고 직접 입력하지 않아도 되어 코드가 짧아진다.
또 material-ui, antd 등 컴포넌트를 이용하면 id값이 날아갔고, id는 전체 코드에서 고유해야 하기 때문에 남용되면 대규모 서비스에선 관리하기 어려워지는 단점들이 있다.

HOC - 특정 컴포넌트 실행 전에 상위 컴포넌트를 먼저 실행시켜 주는 것
HOC를 만들어 놓고 로그인이 필요한 컴포넌트 앞에 HOC만 붙이면 권한처리 할 수 있다는 장점
HOC는 다른 컴포넌트와 함께 실행되므로 with라는 이름을 앞에 붙여준다.
(withAuth, withApollo)

HOF, HOC가 가능한 것은 클로저 덕분!

  • [x] 댓글 디폴트 밸류 들어오게 수정 (컨테이너에서 안 내려준 거였음)
  • [ ] 오늘치 블로그 쓰면서 존 부분 좀 이해하기
  • [x] write 하트 고치기
  • [x] 수정할 때 하트 고치기

함수에 함수에 함수를 더해서
어머 깜짝야 🫢
HOF(Higher Order Function)

export default function notHOFPage() {
  const onClickButton = (event) => {
    console.log(event.target.id)
  };

  return (
    <>
      <button id={123} onClick={onClickButton}>눌러</button>
    </>
  );
}
export default function HOFPage() {
  const onClickButton = (a) => (event) => {
    return console.log(a);
  };

  return (
    <>
      <button onClick={onClickButton(123)}>눌러</button>
    </>
  );
}

 

더보기

새로운 강의 들으니까 좋당ㅎㅎ(지금 듣는 강의가 별로여서X 그냥 새로운 걸 배워서!!!)

그리고 강의에서 왜 이렇게 할까??? 싶은 게 있는데 부트캠프에서 배운 방법이 확실히...! 이유가 있긴 있구나 싶어서 나름 좋았당.

할 수 있는게 생기니까 좋다ㅠ_큐 그리고 하트 부분도 고치고...뿌듯해~~~ 고쳐야될 거, 추가해야될 거 정리해놓고 뽀개듯이 하는 게 성취감 느끼는 것에 도움이 될 것 같다,,~ 그리고 아이패드 스케쥴 관리는 역시 좀 ... 습관이 안 든다ㅠㅠ 종이로 쓰는 걸 구해서 관리해야할 것 같다~~~

 

로스트아크 관련해서 만드니까 재밌었다...커비는 귀엽지만 내가 쓸 스토리가 없었는데 로아는 또 쓸 소스가 엄청 많으니까?! 어떻게 될진 모르겠지만 지금은 재밌다^ㅁ^ 후후

 

오늘도 오는 길에 대한이를 봤다. 넘넘귀여워...볼따구 한 번만 만져봤으면 ㅠㅠ

니나뿌루퉁

 

속 쓰려서 따로 먹은건데 매워서 먹고 더 속쓰려졌다

집중 안돼서 잠깐 벤치에서  공부했다.

엄마가 만들어준 튤립🌷 이라기엔 체리🍒

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'프론트엔드✏️ > 코드캠프' 카테고리의 다른 글

220610 프론트엔드 부트캠프 31일차 : HOF, react-hook-form, yup  (0) 2022.06.11
알고리즘 - 수열, 폰켓몬  (0) 2022.06.10
알고리즘 - 피보나치 수열,  (0) 2022.06.09
220608 프론트엔드 부트캠프 29일차: 로그인, 암호화, JWC 토큰  (0) 2022.06.09
알고리즘 - 최대공약수, 최소공배수 유클리드 호제법  (0) 2022.06.08
    '프론트엔드✏️/코드캠프' 카테고리의 다른 글
    • 220610 프론트엔드 부트캠프 31일차 : HOF, react-hook-form, yup
    • 알고리즘 - 수열, 폰켓몬
    • 알고리즘 - 피보나치 수열,
    • 220608 프론트엔드 부트캠프 29일차: 로그인, 암호화, JWC 토큰
    당근먹는하니
    당근먹는하니

    티스토리툴바

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.