렌더마다 변경되는 값이라서 context Provider에 못 넣는 에러
236
投稿した質問数 5
선생님 강의 5:10 쯤에 temp obj를 provider value에 넣으려고 할 때, "매번 변경되는 값이라서 들어가지 않으니 hook으로 빼주면 된다고" 하셨는데요-!
처음엔 그냥 따라쳤는데 복습하다 보니까 왜 custom hook으로 빼주면 괜찮은지 궁금해요.
에러 메시지가 제안하는 대로 useMemo를 쓰지 않는 건 함수가 async 라서 그런 건가요.
回答 1
1
안녕하세요 츄츄님.
우선 context provider 에 tempObj 를 넣는게 문제가 되죠.
이건 아래 예시처럼 매번 새로운 값을 넣기 때문에 문제가 되는거에요.
<MyContext.Provider value={{something: 'something'}}>
왜 문제가 되냐면 매번 새로운 값을 만들어서 넣기때문에 Provider 가 렌더링 될때마다 하위에서 구독중인 컴포넌트가 모두 리렌더링됩니다.
이 문제를 방지하려면 위쪽에서 useMemo 등으로 value가 항상 새로 생성되지 않는 처리를 해도 됩니다.
강의에서 이 부분을 모두 custom hook 으로 빼준건 전달해야하는 값이 여러개이고, useState와 useEffect를 활용해서 값 변경이 일어날 때 자동으로 state를 변경하는 일이 발생하기 때문입니다.
이 코드가 provider 가 있으면 다른 일을 하는 두 코드가 같이 있게 됩니다. 이게 싫어서 분리한거에요.
(한 곳에 몰아 넣어도 문제되지 않습니다)
강의 소제목
0
461
1
배포 관련 질문
0
647
1
Error: Illegal url for new iframe
0
762
1
빌드 오류(babel-eslint -> @babel/eslint-parser)
0
1177
2
강의 관련 질문입니다!
0
376
1
useState의 set 함수에 대해서 질문이 있습니다.
0
478
1
아직 못 들었는데 듣기 시작한 날부터 수강기한 시작할 수 없을까요?
0
343
1
사용하시는 zsh 테마가 뭐예요?
0
462
2
1월 21일까지 수강기간인데
0
366
1
Module not found: Can't resolve 'fs' 오류
0
2141
1
publicRunTimeConfig error
0
339
1
강의 수강일 문의 드립니다.
0
305
2
https://bit.ly/broken-link 관련 CORS 오류해결
0
304
1
useToast 에러
0
591
1
문의 드립니다😭
0
227
1
빌드시 오류
0
305
1
vercel 배포 후 list의 uid가 넘어가지 않아 문의 드립니다!
1
542
1
CORS 오류로 인한 문의 드립니다
0
311
1
LOCAL_CHROME_PATH 경로에 파일이 없어요!
0
357
1
public runtime config 에러 공유
0
345
1
컴포넌트 파일명에 underscore
0
313
1
firebase admin 코드 추가 강의 부분
7
442
2
구글 로그인 apikey error
0
366
3
firebase/auth import 안됨
0
288
1

