ํ๋ฌํฐ ์ฑํ๋ก๊ทธ๋๋ฐ Day4
์์ ฏ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์๋ฉด ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์์ง, ๊ทธ๋ฆฌ๊ณ ํ๋ฉด์ด ์ฌ๋ผ์ง ๋ ์ด๋ค ๋ก์ง์ ์ฒ๋ฆฌํด์ผ ํ ์ง๋ฅผ ์ ๋ฆฌํด์ ๋ฃ์ ์ ์๋ค.
์๋ช ์ฃผ๊ธฐ๋ฅผ ์ดํดํ๋ฉด ์ฑ์ ๋์์ด๋ ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
์คํ ์ดํธ๋ฆฌ์ค ์์ ฏ์ ํ ๋ฒ ๋ง๋ค์ด์ง๋ฉด ๊ฐฑ์ ํ ์ ์์ผ๋ฏ๋ก ์๋ช ์ฃผ๊ธฐ๊ฐ ์๋ค.
์ฆ, ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ๋์ด๊ฐ๋ฉด ๋ชจ๋ ๋ก์ง์ด ์ข ๋ฃ๋๋ค.
๊ทธ๋ฌ๋ ์คํ ์ดํธํ ์์ ฏ์ 10๋จ๊ณ๋ก ๊ตฌ๋ถํ๋ ์๋ช ์ฃผ๊ธฐ๊ฐ ์๋ค.
์์ ๋ถ์ ๋ฒํธ์์ผ๋ก ์๋ช ์ฃผ๊ธฐ๊ฐ ์งํ๋๋ฏ๋ก ์์๋ ๋์ฌ๊ฒจ๋ด์ผ ํ๋ค.
<์คํ ์ดํธํ ์์ ฏ์ ์๋ช ์ฃผ๊ธฐ>
์ํ๋ฅผ ์์ฑํ๋ createState() ํจ์
๋จผ์ StatefulWidget ํด๋์ค๋ฅผ ์์๋ฐ๋ ํด๋์ค๋ ๋ฐ๋์ createState() ํจ์๋ฅผ ํธ์ถํด์ผ ํ๋ค.
์ด ํจ์๋ ๋ค๋ฅธ ์๋ช ์ฃผ๊ธฐ ํจ์๋ค์ด ํฌํจ๋ State ํด๋์ค๋ฅผ ๋ฐํํ๋ค.
์ฆ, ์์ ฏ์ ์ํ๋ฅผ ์์ฑํ๋ ํจ์์ธ ๊ฒ์ด๋ค.
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => new _MyHomePageState();
}
์์ ฏ์ ํ๋ฉด์ ์ฅ์ฐฉํ๋ฉด mounted == true
์ํ๊ฐ ์์ฑ๋๋ฉด ๊ณง๋ฐ๋ก mounted ์์ฑ์ด true๋ก ๋ณ๊ฒฝ๋๋ค.
mounted ์์ฑ์ด true๋ผ๋ ๊ฒ์ ์์ ฏ์ ์ ์ดํ ์ ์๋ buildContext ํด๋์ค์ ์ ๊ทผํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค.
์์ ฏ์ ์ด๊ธฐํํ๋ initState() ํจ์
initState() ํจ์๋ ์์ ฏ์ ์ด๊ธฐํํ ๋ ํ ๋ฒ๋ง ํธ์ถํ๋ค.
์ฃผ๋ก ๋ฐ์ดํฐ ๋ชฉ๋ก์ ๋ง๋ค๊ฑฐ๋ ์ฒ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ํธ์ถํ๋ค.
@override
initState() {
super.initState();
_getJsonData();
}
์์กด์ฑ์ด ๋ณ๊ฒฝ๋๋ฉด ํธ์ถํ๋ didChangeDependencies() ํจ์
์ด ํจ์๋ ๋ฐ์ดํฐ์ ์์กดํ๋ ์์ ฏ์ด๋ผ๋ฉด ํ๋ฉด์ ํ์ํ๊ธฐ ์ ์ ๊ผญ ํธ์ถํด์ผ ํ๋ค.
์ฃผ๋ก ์์๋ฐ์ ์์ ฏ์ ์ฌ์ฉํ ๋ ํผ์์์๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํธ์ถํ๋ค.
ํ๋ฉด์ ํ์ํ๋ build() ํจ์
์ด ํจ์๋ Widget์ ๋ฐํํ๋ค.
์ฆ, ์์ ฏ์ ํ๋ฉด์ ๋ ๋๋งํ๋ค. build() ํจ์์์ ์์ ฏ์ ๋ง๋ค๊ณ ๋ฐํํ๋ฉด ํ๋ฉด์ ํ์๋๋ค.
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.amber,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
์์ ฏ์ ๊ฐฑ์ ํ๋ didUpdateWidget() ํจ์
๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ด ์์ ฏ์ ๊ฐฑ์ ํด์ผ ํ ๋ ํธ์ถํ๋ค.
์์ ฏ์ ์ํ๋ฅผ ๊ฐฑ์ ํ๋ setState() ํจ์
setState() ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๊ณ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ํ๋ฉด์ UI๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๋ค.
์ฑ์ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ํจ์์ด๋ฏ๋ก ์ ์ผ ๋ง์ด ํธ์ถํ๋ ํจ์์ด๋ค.
void updateProfile(String name) {
setState() => this.name = name);
}
์์ ฏ์ ์ํ ๊ด๋ฆฌ๋ฅผ ์ค์งํ๋ deactivate() ํจ์
deactivate() ํจ์๋ State ๊ฐ์ฒด๊ฐ ํ๋ฌํฐ์ ๊ตฌ์ฑ ํธ๋ฆฌ๋ก๋ถํฐ ์ ๊ฑฐ๋ ๋ ํธ์ถ๋๋ค.
๋ค๋ง, State ๊ฐ์ฒด๊ฐ ์ ๊ฑฐ๋๋ค๊ณ ํด์ ํด๋น ๋ฉ๋ชจ๋ฆฌ๊น์ง ์ง์์ง์ง๋ ์๋๋ค.
์์ ฏ์ ์ํ ๊ด๋ฆฌ๋ฅผ ์์ ํ ๋๋ด๋ dispose() ํจ์
State ๊ฐ์ฒด๋ฅผ ์๊ตฌ์ ์ผ๋ก ์๋ฉธํ ๋ ํธ์ถํ๋ค.
์ด ํจ์๋ฅผ ํธ์ถํ๋ค๋ ๊ฒ์ ์ด์ ํด๋น ์์ ฏ์ ์ข ๋ฃํ๋ค๋ ๋ป์ด๋ค.
์์ ฏ์ ํ๋ฉด์์ ์ ๊ฑฐํ๋ฉด mounted == false
State ๊ฐ์ฒด๊ฐ ์๋ฉธํ๋ฉด ๋ง์ง๋ง์ผ๋ก mounted ์์ฑ์ด false๋ก ๋๋ฉด์ ์๋ช ์ฃผ๊ธฐ๊ฐ ๋๋๋ค.
์์ ฏ์ ์๋ช ์ฃผ๊ธฐ ์์ฝ
ํธ์ถ ์์ | ์๋ช ์ฃผ๊ธฐ | ๋ด์ฉ |
1 | createState() | ์ฒ์ ์คํ ์ดํธํ์ ์์ํ ๋ ํธ์ถ |
2 | mounted == true | createState() ํจ์๊ฐ ํธ์ถ๋๋ฉด mounted๋ true |
3 | initState() | State์์ ์ ์ผ ๋จผ์ ์คํ๋๋ ํจ์. State ์์ฑ ํ ํ ๋ฒ๋ง ํธ์ถ |
4 | didChangeDependencies | initState() ํธ์ถ ํ์ ํธ์ถ๋๋ ํจ์ |
5 | build() | ์์ ฏ์ ๋ ๋๋งํ๋ ํจ์. ์์ ฏ์ ๋ฐํ |
6 | didUpdateWidget() | ์์ ฏ์ ๋ณ๊ฒฝํด์ผ ํ ๋ ํธ์ถํ๋ ํจ์ |
7 | setState() | ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์์์ ์๋ฆฌ๋ ํจ์. ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ UI์ ์ ์ฉํ๊ธฐ ์ํด ํ์ |
8 | deactivate() | State๊ฐ ์ ๊ฑฐ๋ ๋ ํธ์ถ |
9 | dispose() | State๊ฐ ์์ ํ ์ ๊ฑฐ๋์์ ๋ ํธ์ถ |
10 | mounted == false | ๋ชจ๋ ํ๋ก์ธ์๊ฐ ์ข ๋ฃ๋ ํ mounted๊ฐ false๋ก ๋จ |
'๐ฑ Mobile > ํ๋ฌํฐ ์ฑํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ฌํฐ ์ฑํ๋ก๊ทธ๋๋ฐ Day6 (0) | 2023.01.08 |
---|---|
ํ๋ฌํฐ ์ฑํ๋ก๊ทธ๋๋ฐ Day5 (0) | 2023.01.07 |
ํ๋ฌํฐ ์ฑํ๋ก๊ทธ๋๋ฐ Day3 (0) | 2023.01.03 |
ํ๋ฌํฐ ์ฑํ๋ก๊ทธ๋๋ฐ Day2 (0) | 2023.01.02 |
ํ๋ฌํฐ ์ฑํ๋ก๊ทธ๋๋ฐ Day1 (0) | 2023.01.01 |