본문 바로가기
Skills/Flutter

[RiverPod] ref select 기능

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

 

 

 

2024.04.28 - [Skills/Flutter] - [RiverPod] ref.watch, ref.listen, ref.read의 차이

 

이전 포스팅에서 ref에서 다뤘지만, select를 제외한 나머지 기능에 대한 포스팅이였습니다.

 

그러나 select 역시 ref의 주요 기능 중 하나이기 때문에 이번 글은 추가적으로 select에 대한 포스팅입니다.

 

select


Riverpod에서 select는 매우 유용한 기능으로, 프로바이더에서 특정 부분의 데이터만을 구독하고자 할 때 사용됩니다. 

 

이를 통해 필요한 데이터 부분만을 선택하여 관찰하고, 해당 부분이 변경될 때만 위젯을 재빌드하도록 설정할 수 있습니다. 

 

select는 성능 최적화에 큰 도움이 되며, 불필요한 빌드를 줄여줍니다.

 

사용법


select를 사용하여 프로바이더의 특정 값을 선택적으로 감시할 수 있습니다. 

 

예를 들어, 사용자 모델에서 사용자의 이름만을 구독하고자 할 때, 다음과 같이 작성할 수 있습니다:

final userNameProvider = Provider((ref) => User(name: "John Doe", age: 30));

class UserNameWidget extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final String name = ref.watch(userNameProvider.select((User user) => user.name));
    return Text(name);
  }
}

 

기능 설명


선택 함수: select 메서드는 선택 함수를 인자로 받습니다. 

 

이 함수는 프로바이더의 전체 상태 중에서 필요한 부분만을 반환합니다.


성능 최적화: select는 선택한 데이터가 변경될 때만 위젯을 재빌드합니다.

 

따라서, 전체 데이터 모델이 아니라 필요한 부분만 변경되었을 때의 처리를 최적화할 수 있습니다.

 

주요 이점


효율적인 리소스 사용: 

 

필요한 데이터 부분만 업데이트하므로, 리소스 사용을 최적화하고 앱의 반응 속도를 향상시킬 수 있습니다.


코드의 명확성: 

 

필요한 데이터 부분만 명시적으로 선택함으로써, 코드의 가독성과 관리성이 향상됩니다.

 

 

 

728x90
반응형