網(wǎng)站首頁 編程語言 正文
正文
我們都知道 setState(VoidCallback fn) 是這樣用的:
setState(() { count++; });
執(zhí)行完后組件會重新 build(),就可以取到 count 的最新值了。但其實這樣寫也是一樣的:
count++; setState(() {});
因為 setState() 最后會調用?markNeedsBuild()
,F(xiàn)lutter 會調度使組件 rebuild,所以狀態(tài)變量的改變不是必須寫在 setState() 的回調里面,只需要最后執(zhí)行一下 setState() 也可以達到刷新界面的效果。
那為什么 Flutter 要設計 setState() 有個回調函數(shù)呢?有兩個原因:
一是 setState() 的狀態(tài)更新是同步的,如果你在 fn 里返回了一個?Future
?去改變狀態(tài)的值,setState 內部的斷言會提示你不要這樣做,應該在 Future 完成后在同步代碼里去調用 setState 改變狀態(tài)。
二是為了代碼可維護性考慮。試想一下隨著業(yè)務代碼的迭代,可能會有很多狀態(tài)變量會發(fā)生改變,比如一開始只有狀態(tài)變量 a,后來加入了狀態(tài)變量 b 和 c,代碼變成這樣:
a++; b++; c++; setState(() {});
當后續(xù)業(yè)務發(fā)生變化這些狀態(tài)變量都不需要了,后面維護的童鞋把這些狀態(tài)變量都刪除了。因為大家通常都只關注改自己的代碼,會有可能忘記刪除最后的 setState,代碼就變成了這樣:
// a++; // b++; // c++; setState(() {});
這樣就造成了不必要的 rebuild 浪費。所以綜上所述,特別是考慮到代碼的維護性,我們都應該把狀態(tài)變量的改變放到 setState 的回調里面。
原文鏈接:https://segmentfault.com/a/1190000042612321
相關推薦
- 2022-03-31 聊聊Python?String型列表求最值的問題_python
- 2022-10-20 Python?BautifulSoup?節(jié)點信息_python
- 2023-03-21 SQL數(shù)據(jù)庫的所有命令(函數(shù)、運算符)匯總大全_數(shù)據(jù)庫其它
- 2023-01-08 Android?Application的使用全面解析_Android
- 2022-05-10 二叉樹的遞歸和非遞歸遍歷
- 2022-06-28 Python技法之如何用re模塊實現(xiàn)簡易tokenizer_python
- 2022-04-20 C#9.0推出的4個新特性介紹_C#教程
- 2023-03-22 React?Native全面屏狀態(tài)欄和底部導航欄適配教程詳細講解_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支