useEffect()는 initState() 및 didUpdateWidget, 그리고 dispose()와 같은 효과를 낼 수 있다. 아래 코드에서는 useEffect 내부에 컨트롤러의 변경값이 있을 때마다 useValue에 넣는 리스너를 추가했다. 그리고 그 변경값은 [] 안에 넣어준다. 마지막으로 return은 dispose와 같은 효과를 낼 수 있으며, 필요가 없을 시 null을 넣어주면 된다. 이렇듯 라이프사이클에 대한 전반적인 이해가 잘 갖춰져야 사용할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class MyApp extends HookWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    final useMyController = useTextEditingController();
    final useValue = useState("");
    useEffect(() {
      useMyController.addListener(() {
        useValue.value = useMyController.text;
      });
      return useMyController.dispose;
    },
    [useMyController]);
    
    
    return MaterialApp(
      home: Scaffold(
        body: Column(
          children: [
            TextField(
              controller: useMyController,
            ),
            Text(useValue.value),
          ],
        )
      )
    );
  }
}

요약:

  1. 변경되는 값을 List에 넣고,
  2. 함수 내의 실행 공간에서는 실행 명령을 넣는다.
  3. return으로 dispose를 처리한다.