remember 不能用使用基礎(chǔ)屬性
需求蝴蜓,記錄一個(gè)變化值,但是不行引發(fā)重組
1. 搞一個(gè)靜態(tài)變量來(lái)記錄左胞。
問(wèn)題:復(fù)用暇榴,多處引用的話還需要用到map來(lái)保存。相對(duì)復(fù)雜尤仍,麻煩
2. 使用remember來(lái)實(shí)現(xiàn)箫津。
問(wèn)題:一般情況,remember 跟 mutableStateOf 使用吓著。但是State的變更會(huì)導(dǎo)致重組鲤嫡。
但是,這里不想引發(fā)重組绑莺,所以暖眼,不能用mutableStateOf 。但是纺裁,這里如果直接使用基礎(chǔ)屬性
例如
var first = remember { true }
first = false
在后續(xù)的重組中remember 不會(huì)有任何的意義
解決辦法
val first = remember {
Cover(true)
}
class Cover<T>(var v: T)
原因 基礎(chǔ)類型不是引用诫肠,修改并不能傳導(dǎo)。(最基本的XD)
最終的rember是保存在
currentComposer.slotTable.slots中的欺缘,通過(guò)
internal var reader: SlotReader = slotTable.openReader().also { it.close() }
reader來(lái)讀取相關(guān)的數(shù)據(jù)栋豫。
所以,如果使用基礎(chǔ)類型來(lái)進(jìn)行賦值谚殊,雖然你在后面代碼中修改了值丧鸯。但是,由于是基礎(chǔ)類型嫩絮,他無(wú)法更改到slots中的數(shù)據(jù)丛肢,所以围肥,在slots的數(shù)據(jù)是一個(gè)固定不變的基礎(chǔ)類型。