1.【模擬面試追問|UI 與版型】 面試官看到 internal val LocalSpacing = staticCompositionLocalOf { Spacing() },問:「為什麼用 staticCompositionLocalOf,不用 compositionLocalOf?假設之後間距要跟著視窗寬度換一組值(平板上間距加大),使用者把摺疊機展開的那一刻,這兩種寫法在重組上各會發生什麼事?你還會選 static 嗎?」
我的回答:
官方文件:
staticCompositionLocalOf 是 Jetpack Compose 中用來建立全域或區域隱含資料傳遞物件(CompositionLocal)的 API。與 compositionLocalOf 不同,staticCompositionLocalOf 的讀取操作不會被 composer 追蹤,因此更改 CompositionLocalProvider 呼叫中提供的值會導致整個內容重新組合,而不僅僅是組合中使用該本地值的地方。然而,這種缺乏追蹤的特性使得 staticCompositionLocalOf 在提供的值極不可能或永遠不會更改時更有效率。例如,Android 上下文、字體載入器或類似的共享值不太可能在 CompositionLocalProvider 的內容元件中更改,因此應考慮使用 staticCompositionLocalOf。顏色或其他主題之類的值可能會更改,甚至可能帶有動畫效果,因此應使用 compositionLocalOf。
在間距要跟著視窗寬度換一組值(平板上間距加大)的場景,staticCompositionLocalOf 的改變會全量重組。
Pablo Costa:
簡而言之:不要根據數據變化的頻率來選擇,而是根據數據的閱讀範圍來選擇。
Jetpack Compose: Static vs Dynamic CompositionLocals — Reads, Writes and Trade Offs
2.【決策邊界|UI 與版型】 假設公司決定讓同事改用 10 吋平板,橫放在車上操作,任務列表要變成左邊列表、右邊詳情的兩欄。今天的 Modifier.maxContentWidth()(單欄內容置中、上限 600dp)在這個畫面還適用嗎?你會在什麼條件下切成兩欄?判斷依據要放在哪一層:design system、app 還是 feature?為什麼?
我的回答:
(待補)