인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김가은님의 프로필 이미지
김가은

작성한 질문수

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

ref.watch로 데이터 변경을 감지하면 해당 코드가 포함된 위젯 전 체가 다 다시 빌드되나요??

작성

·

385

0

안녕하세요!

riverpod과 관련해서 질문이 있어서 남깁니다.

 

ref.watch로 데이터 변경이 감지되면 해당 위젯 전체(하위까지)가 모두 다시 빌드되나요? 아니면 해당 데이터를 사용하는 부분만 다시 빌드가 되나요??

 

추가로 위젯이 리빌드가 되는지 안되는지 알 수 있는 방법이 있을까요??

 

 

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

코드팩토리 디스코드
https://bit.ly/3HzRzUM

Flutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!

답변 1

1

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

아주 좋은 질문입니다.

질문의 흐름을 논리적으로 냉정하게 파악을 하다보면 쉽게 답변에 이를 수 있습니다!

1) ref.watch로 데이터 변경이 감지되면 해당 위젯 전체(하위까지)가 모두 다시 빌드되나요?

생각보다 쉽게 결론에 이를 수 있습니다. 일반적인 상황에서 상위의 build() 함수가 실행되면 하위 build() 함수가 마찬가지로 실행되나요 안되나요? 당연히 실행됩니다. 왜냐하면 상위 build() 함수가 실행됐다는건 하위 build() 함수도 UI가 바뀔 '여지'가 있다는 뜻이니까요. 그럼 실행이 안되는 경우는 어떤 경우일까요? 이건 제가 초급에서도 다뤘는데 const로 UI 선언이 돼있을경우 다시 빌드되지 않습니다! 아무리 하위에있는 위젯이라도요. 매개변수가 변경될 여지가 없는 상태인데 비효율적으로 다시 빌드할 필요가 없겠죠? 이건 제 초급강의의 위젯 라이프사이클을 참고해보시면 되겠습니다!

2) 아니면 해당 데이터를 사용하는 부분만 다시 빌드가 되나요??

해당 데이터를 사용하는 부분이 리빌드가 되는건 맞습니다. 쉽게말해서 ref.watch를 하지 않고있으면 해당 위젯은 프로바이더의 데이터를 사용하지 않는거기때문에 리빌드가 안됩니다! 하지만 하위 위젯이 리빌드 되냐 안되냐의 연장선에서 질문을 주신거라면 1번 답변을 참고해주세요!

3) 추가로 위젯이 리빌드가 되는지 안되는지 알 수 있는 방법이 있을까요??

쉽습니다. 어떤 함수가 실행이 되는지 안되는지 알아보는 방법은 무엇이 있나요? 해당 함수의 첫번째 줄에 print()를 한번 실행해보세요!

김가은님의 프로필 이미지
김가은
질문자

전체적인 그림이 좀 잡히고 나니 위젯 라이프사이클에 대해 더 궁금증이 생기고, 렌더링 최적화를 하고싶어요!!

답변주신 부분 참고해서 공부해볼게요. 감사합니다!!

김가은님의 프로필 이미지
김가은

작성한 질문수

질문하기