setState()
接受函數只是爲了立即調用它,然後請求重建有什麼好處?特別是,用戶顯式調用「重建」類型函數有什麼優勢?爲什麼setState需要關閉?
5
A
回答
7
當Flutter具有「markNeedsBuild」功能時,開發人員最終只是隨意調用它。當語法切換爲setState(() { ... })
時,開發人員更可能正確使用API。從機器的角度來看,它們在功能上是等價的,但是它們似乎可以喚起開發人員的不同代碼。
如果你遵循的唯一一個突變關閉setState
內部成員變量的約定,你會避免你重構一些代碼,意外地刪除調用setState
,或致電setState
不必要的情況。如果您的State
未被安裝,Flutter可能會失敗一個斷言,所以只要開始嘗試對成員進行變異,而不是最後就知道出了錯。
最終有可能會是一個analyzer warning執行的是一個突變的State
成員時,setState
總是被調用,這樣的initState
外面發生或setState
回調將被標記爲可疑的任何成員變量突變。
如果您剛開始使用Flutter狀態,請查看Flutter widgets tour。我發現我撥打setState
的很多案例可以使用FutureBuilder
,StreamBuilder
,AnimatedWidget
或AnimatedBuilder
更優雅地處理,因此如果您發現自己撥打setState
很多,請不要忘記考慮這些替代方案。
Adam Barth和Yaroslav Volovich對此問題/答案做出了貢獻。
相關問題
- 1. 爲什麼需要關閉File.Create?
- 2. 爲什麼我要關閉Java.io.IOException流?
- 3. 爲什麼我們需要一個半關閉的插座?
- 4. 爲什麼我需要關閉安全驗證?
- 5. 爲什麼我需要最終使用來關閉資源?
- 6. C#/ MonoDevelop:GTK MessageDialogs需要雙擊才能關閉 - 爲什麼?
- 7. 爲什麼使用它後需要關閉文件?
- 8. 爲什麼Session.Flush()需要保持關係?
- 9. 爲什麼需要
- 10. 管道關閉不需要關閉
- 11. 爲什麼setState返回undefined?
- 12. 爲什麼HttpUrlConnection不關閉?
- 13. ResultSet已關閉。爲什麼?
- 14. 我們什麼時候需要關閉MongoConnection
- 15. 關閉php4安全模式 - 需要考慮什麼?
- 16. 在什麼情況下需要關閉HTTP連接?
- 17. 我需要關閉IAsyncOperation嗎?
- 18. 需要多久Tomcat關閉?
- 19. Groovy XmlParser - >需要關閉?
- 20. OpenGL ES需要「關閉」嗎?
- 21. 我需要關閉流嗎?
- 22. 我需要Javascript關閉嗎?
- 23. 爲什麼你需要在html中關閉段落,鏈接,圖像等?
- 24. 爲什麼在這裏需要關閉在循環中調用XMLHttpRequest函數?
- 25. 爲什麼在讀取和寫入管道時需要關閉fds?
- 26. 爲什麼需要typedef GLXContext?
- 27. 爲什麼Apache需要SSLCertificateKeyFile?
- 28. 爲什麼android需要jvm
- 29. 爲什麼BizTalk需要MSDTC?
- 30. 爲什麼需要StaticResource?