[flutter] 플러터에서 useSelector 훅(hook)을 사용한 상태 검색 및 변경

플러터(Flutter) 앱을 개발하다 보면 앱 상태를 검색하고 변경해야 하는 경우가 많습니다. Redux와 같은 상태 관리 라이브러리를 사용할 때, useSelector 훅을 사용하면 상태를 간편하게 검색하고 변경할 수 있습니다.

useSelector 훅 소개

Redux의 useSelector 훅은 Redux 스토어에서 특정 상태를 선택하는 데 사용됩니다. useSelector 훅은 함수 컴포넌트 내에서 사용되며, Redux 스토어에 접근하여 필요한 상태를 검색할 수 있습니다. 또한 해당 상태가 변경될 때 자동으로 업데이트됩니다.

useSelector 훅 사용 방법

다음은 useSelector 훅을 사용하여 Redux 스토어에서 특정 상태를 검색하는 간단한 예제입니다.

import 'package:flutter_redux/flutter_redux.dart';
import 'package:redux/redux.dart';

class AppState {
  // Redux 스토어의 상태 모델
  String userName;
}

void main() {
  final store = Store<AppState>(
    // Redux 리듀서와 초기 상태 설정
    ...
  );

  runApp(MyApp(store: store));
}

class MyApp extends StatelessWidget {
  final Store<AppState> store;

  const MyApp({Key key, this.store}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return StoreProvider(
      store: store,
      child: MaterialApp(
        // 앱 구성
        home: MyHomePage(),
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StoreConnector<AppState, String>(
      converter: (store) => store.state.userName,
      builder: (context, userName) {
        return Text('Username: $userName');
      },
    );
  }
}

위의 예제에서 StoreConnector 위젯을 사용하여 Redux 스토어에서 userName 상태를 검색하고, 해당 상태를 화면에 출력하고 있습니다.

이제 useSelector 훅을 사용하여 동일한 기능을 하는 함수 컴포넌트를 만들어보겠습니다.

import 'package:flutter_redux/flutter_redux.dart';
import 'package:redux/redux.dart';
import 'package:redux_hooks/redux_hooks.dart';

class MyApp extends HookWidget {
  @override
  Widget build(BuildContext context) {
    final userName = useSelector((AppState state) => state.userName);
    return Text('Username: $userName');
  }
}

useSelector 훅을 사용하면 위젯이 간소화되고, Redux 스토어에서 필요한 상태를 직접 검색할 수 있습니다.

마무리

이제 useSelector 훅을 사용하여 Redux 스토어의 상태를 간편하게 검색하고 변경하는 방법에 대해 알아보았습니다. Redux를 사용하는 경우, useSelector 훅을 활용하여 더욱 간결하고 유연한 상태 관리를 할 수 있습니다.

위 내용은 Redux와 redux_hooks 라이브러리를 기반으로 설명하였습니다. 더 자세한 내용은 공식 문서를 참고하시기 바랍니다.

Happy coding! 😊