簡體   English   中英

撰寫 - DropDownMenu 導致不需要的重組

[英]Compose - DropDownMenu is causing unwanted recomposition

這是我的應用程序中的可組合層次結構:

HorizontalPager
↪LazyVerticalGrid
 ↪PostItem
  ↪AsyncImage
   DropdownMenu
   ↪DropdownMenuItem

當滑動HorizontalPager AsyncImage時,我的 PostItem 中的 AsyncImage 正在重新組合。 刪除DropdownMenu可以修復此問題,並且 PostItem 不再重新組合並提供所需的行為。

問題是我在瀏覽 Horizo HorizontalPager時 FPS 大幅下降。 為什么在滑動HorizontalPager ntalPager 時DropdownMenu導致重組?

var showMenu by remember { mutableStateOf(false) }
        DropdownMenu(
            expanded = showMenu,
            onDismissRequest = { showMenu = false }) {
            DropdownMenuItem(onClick = {

            }) {
                Text(text = "Share")
            }
    
}

不幸的是,沒有看到更多顯示結構 rest 的代碼,很難確定您的問題出在哪里。

一個可能的答案是您沒有充分拆分可組合項 function。 文檔幾乎沒有提到的是,許多內置可組合對象的content部分是inline functions ,這意味着如果內容重構,父級也會重構。 這是我能給出的最簡單的例子。

@Composable
fun foo() {
    println("recompose function")

    Box {
        println("recompose box")

        Column {
            println("recompose column")

            Row {
                println("recompose row")

                var testState by mutableStateOf("my text")

                Button(
                    onClick = { testState = "new text" }
                ) {}
                Text(testState)
            }
        }
    }
}

output 是:重組 function 重組框 重組列 重組行

這不僅重組了整個 function,它還重新創建了testState ,使其永遠不會更改值。

再次不是 100% 這是你的問題,但我會調查它。 解決方案是將我的Row和行內容拆分到它自己的可組合項 function 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM