플러터(Flutter)는 React Native 등과 유사한 방식으로 상태 관리를 위해 Hook을 제공합니다. 그 중 하나인 useReducer Hook을 사용하면 상태와 상태를 변경하는 함수를 하나의 객체로 관리할 수 있습니다. 이를 통해 복잡한 상태 관리를 간결하게 처리할 수 있습니다.
useReducer Hook 사용 방법
useReducer Hook을 사용하기 위해서는 flutter_hooks 패키지가 필요합니다. 따라서 프로젝트의 pubspec.yaml 파일에 flutter_hooks를 추가해야 합니다. 예를 들어,
dependencies:
flutter_hooks: ^0.14.0
위와 같이 flutter_hooks라는 패키지를 사용하겠다고 선언해야 합니다. 그런 다음 main.dart 파일에서 flutter_hooks 패키지를 가져옵니다.
import 'package:flutter_hooks/flutter_hooks.dart';
이제 useReducer Hook을 사용하여 상태 관리를 할 수 있습니다. 예를 들어 다음과 같이 Counter 앱을 만들어보겠습니다.
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
void main() {
runApp(MyApp());
}
class MyApp extends HookWidget {
@override
Widget build(BuildContext context) {
final counterState =
useReducer((int state, int action) => state + action, 0);
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Counter App'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Count:', style: TextStyle(fontSize: 24)),
Text('${counterState.value}', style: TextStyle(fontSize: 48)),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
RaisedButton(
onPressed: () {
counterState.dispatch(-1);
},
child: Text('-'),
),
SizedBox(width: 16),
RaisedButton(
onPressed: () {
counterState.dispatch(1);
},
child: Text('+'),
),
],
),
],
),
),
),
);
}
}
위의 코드에서 useReducer Hook으로 counterState라는 변수를 선언합니다. counterState.value는 현재의 상태를 가리키고, counterState.dispatch는 상태를 변경하는 함수를 호출할 수 있습니다.
위 코드에서는 useReducer Hook을 사용하여 초기 상태를 0으로 설정하고, 상태를 변경하는 로직이 state + action이라는 간단한 함수로 정의됩니다.
마지막으로, counterState.value를 사용하여 현재 상태를 표시하고, counterState.dispatch를 사용하여 +와 - 버튼을 클릭했을 때 상태를 변경합니다.
결론
플러터(Flutter)에서 useReducer Hook을 사용하여 상태 관리를 쉽고 간결하게 할 수 있습니다. 이를 통해 복잡한 애플리케이션에서도 상태를 효율적으로 관리할 수 있습니다. useReducer를 사용하면 Redux와 비슷한 패턴을 간단하게 구현할 수 있으므로, 플러터 앱 개발을 할 때 유용하게 활용할 수 있습니다.