inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

만들면서 배우는 프론트엔드 DO IT 코딩 (Next.js, Typescript)

React.js context 활용한 Auth 처리

렌더마다 변경되는 값이라서 context Provider에 못 넣는 에러

240

xxiiuu

작성한 질문수 5

0

선생님 강의 5:10 쯤에 temp obj를 provider value에 넣으려고 할 때, "매번 변경되는 값이라서 들어가지 않으니 hook으로 빼주면 된다고" 하셨는데요-!
처음엔 그냥 따라쳤는데 복습하다 보니까 왜 custom hook으로 빼주면 괜찮은지 궁금해요.
에러 메시지가 제안하는 대로 useMemo를 쓰지 않는 건 함수가 async 라서 그런 건가요.

Next.js

답변 1

1

totuworld

안녕하세요 츄츄님.

우선 context provider 에 tempObj 를 넣는게 문제가 되죠.

이건 아래 예시처럼 매번 새로운 값을 넣기 때문에 문제가 되는거에요.

 <MyContext.Provider value={{something: 'something'}}>

 

왜 문제가 되냐면 매번 새로운 값을 만들어서 넣기때문에 Provider 가 렌더링 될때마다 하위에서 구독중인 컴포넌트가 모두 리렌더링됩니다.

이 문제를 방지하려면 위쪽에서 useMemo 등으로 value가 항상 새로 생성되지 않는 처리를 해도 됩니다.

 

강의에서 이 부분을 모두 custom hook 으로 빼준건 전달해야하는 값이 여러개이고, useState와 useEffect를 활용해서 값 변경이 일어날 때 자동으로 state를 변경하는 일이 발생하기 때문입니다.

이 코드가 provider 가 있으면 다른 일을 하는 두 코드가 같이 있게 됩니다. 이게 싫어서 분리한거에요.

(한 곳에 몰아 넣어도 문제되지 않습니다)

강의 소제목

0

466

1

배포 관련 질문

0

650

1

Error: Illegal url for new iframe

0

765

1

빌드 오류(babel-eslint -> @babel/eslint-parser)

0

1183

2

강의 관련 질문입니다!

0

384

1

useState의 set 함수에 대해서 질문이 있습니다.

0

482

1

아직 못 들었는데 듣기 시작한 날부터 수강기한 시작할 수 없을까요?

0

347

1

사용하시는 zsh 테마가 뭐예요?

0

467

2

1월 21일까지 수강기간인데

0

370

1

Module not found: Can't resolve 'fs' 오류

0

2148

1

publicRunTimeConfig error

0

342

1

강의 수강일 문의 드립니다.

0

311

2

https://bit.ly/broken-link 관련 CORS 오류해결

0

308

1

useToast 에러

0

597

1

문의 드립니다😭

0

230

1

빌드시 오류

0

309

1

vercel 배포 후 list의 uid가 넘어가지 않아 문의 드립니다!

1

546

1

CORS 오류로 인한 문의 드립니다

0

314

1

LOCAL_CHROME_PATH 경로에 파일이 없어요!

0

360

1

public runtime config 에러 공유

0

349

1

컴포넌트 파일명에 underscore

0

315

1

firebase admin 코드 추가 강의 부분

7

445

2

구글 로그인 apikey error

0

371

3

firebase/auth import 안됨

0

294

1