網(wǎng)站首頁 編程語言 正文
正文
我們都知道 setState(VoidCallback fn) 是這樣用的:
setState(() { count++; });
執(zhí)行完后組件會重新 build(),就可以取到 count 的最新值了。但其實(shí)這樣寫也是一樣的:
count++; setState(() {});
因?yàn)?setState() 最后會調(diào)用?markNeedsBuild()
,F(xiàn)lutter 會調(diào)度使組件 rebuild,所以狀態(tài)變量的改變不是必須寫在 setState() 的回調(diào)里面,只需要最后執(zhí)行一下 setState() 也可以達(dá)到刷新界面的效果。
那為什么 Flutter 要設(shè)計(jì) setState() 有個回調(diào)函數(shù)呢?有兩個原因:
一是 setState() 的狀態(tài)更新是同步的,如果你在 fn 里返回了一個?Future
?去改變狀態(tài)的值,setState 內(nèi)部的斷言會提示你不要這樣做,應(yīng)該在 Future 完成后在同步代碼里去調(diào)用 setState 改變狀態(tài)。
二是為了代碼可維護(hù)性考慮。試想一下隨著業(yè)務(wù)代碼的迭代,可能會有很多狀態(tài)變量會發(fā)生改變,比如一開始只有狀態(tài)變量 a,后來加入了狀態(tài)變量 b 和 c,代碼變成這樣:
a++; b++; c++; setState(() {});
當(dāng)后續(xù)業(yè)務(wù)發(fā)生變化這些狀態(tài)變量都不需要了,后面維護(hù)的童鞋把這些狀態(tài)變量都刪除了。因?yàn)榇蠹彝ǔ6贾魂P(guān)注改自己的代碼,會有可能忘記刪除最后的 setState,代碼就變成了這樣:
// a++; // b++; // c++; setState(() {});
這樣就造成了不必要的 rebuild 浪費(fèi)。所以綜上所述,特別是考慮到代碼的維護(hù)性,我們都應(yīng)該把狀態(tài)變量的改變放到 setState 的回調(diào)里面。
原文鏈接:https://segmentfault.com/a/1190000042612321
相關(guān)推薦
- 2023-04-18 C++超詳細(xì)分析優(yōu)化排序算法之堆排序_C 語言
- 2022-02-01 Google Chrome進(jìn)入暗黑模式
- 2023-01-30 delphi?判斷字符串是否包含漢字,正則版與非正則版實(shí)現(xiàn)_Delphi
- 2022-06-06 Docker容器化應(yīng)用與結(jié)構(gòu)_docker
- 2023-11-12 Docker中如何限制容器可用的 CPU
- 2022-04-26 C#元組類型ValueTuple用法詳解_實(shí)用技巧
- 2022-09-07 淺談React底層實(shí)現(xiàn)原理_React
- 2022-04-25 python變量賦值機(jī)制踩坑記錄_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支