본문 바로가기
Skills/Flutter

[RiverPod] ref.watch, ref.listen, ref.read의 차이

by Hoseok 2024. 4. 28.
728x90
반응형

 

 

 

Riverpod에서 ref.watch, ref.listen, ref.read는 프로바이더의 데이터를 다루는 세 가지 다른 접근 방식을 제공합니다. 

 

각각은 다음과 같은 목적과 사용법을 가지고 있습니다:

 

1. ref.watch


목적: ref.watch는 프로바이더의 값이 변경될 때마다 위젯을 다시 빌드하도록 요청합니다. 

 

이는 주로 UI와 직접적으로 연관된 데이터를 다룰 때 사용됩니다.


사용법: ref.watch를 호출하면 프로바이더의 현재 상태를 반환하며, 

 

해당 프로바이더의 값이 변경될 때마다 위젯이 자동으로 다시 빌드됩니다.

 

2. ref.listen


목적: ref.listen은 프로바이더의 값이 변경될 때마다 콜백 함수를 실행시키지만, 위젯의 빌드를 트리거하지는 않습니다. 

 

이는 데이터의 변화에 반응하여 특정 작업을 수행하고 싶을 때 사용되며, UI 업데이트가 필요 없을 때 유용합니다.


사용법: ref.listen에는 프로바이더와 콜백 함수를 인자로 전달합니다. 

 

값이 변할 때마다 전달된 콜백이 실행되어 처리가 이루어집니다.

 

3. ref.read


목적: ref.read는 프로바이더의 현재 값을 반환하지만, 값의 변경을 구독하지 않습니다. 

 

즉, ref.read를 사용하면 값을 한 번 읽을 수는 있지만, 후속 값 변경에 대해서는 알 수 없습니다. 이는 단발성으로 데이터를 읽어야 할 때 사용됩니다.


사용법: ref.read를 호출하면 프로바이더의 현재 값을 반환합니다. 

 

이 메소드는 일반적으로 이벤트 처리나 조건적 로직 수행 시 사용됩니다.

 

요약


ref.watch: 값이 변할 때마다 위젯을 재빌드.


ref.listen: 값이 변할 때마다 콜백 함수를 실행하지만, 위젯 재빌드는 하지 않음.


ref.read: 값을 읽지만, 후속 변경을 추적하지 않음.

 

728x90
반응형