remember 不能用使用基礎(chǔ)屬性
需求,記錄一個變化值,但是不行引發(fā)重組
1. 搞一個靜態(tài)變量來記錄。
問題:復(fù)用,多處引用的話還需要用到map來保存。相對復(fù)雜,麻煩
2. 使用remember來實現(xiàn)。
問題:一般情況,remember 跟 mutableStateOf 使用。但是State的變更會導(dǎo)致重組。
但是,這里不想引發(fā)重組,所以,不能用mutableStateOf 。但是,這里如果直接使用基礎(chǔ)屬性
例如
var first = remember { true }
first = false
在后續(xù)的重組中remember 不會有任何的意義
解決辦法
val first = remember {
Cover(true)
}
class Cover<T>(var v: T)
原因 基礎(chǔ)類型不是引用,修改并不能傳導(dǎo)。(最基本的XD)
最終的rember是保存在
currentComposer.slotTable.slots中的,通過
internal var reader: SlotReader = slotTable.openReader().also { it.close() }
reader來讀取相關(guān)的數(shù)據(jù)。
所以,如果使用基礎(chǔ)類型來進行賦值,雖然你在后面代碼中修改了值。但是,由于是基礎(chǔ)類型,他無法更改到slots中的數(shù)據(jù),所以,在slots的數(shù)據(jù)是一個固定不變的基礎(chǔ)類型。