Skip to content

Commit 8c33811

Browse files
committed
Delegate viewModel to remember on JS DOM to eliminate false recompositions
Add a `key` parameter BTW.
1 parent 5c02584 commit 8c33811

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

compose-multiplatform-lifecycle-viewmodel/src/androidxCommonMain/kotlin/ViewModel.androidxCommon.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ import androidx.lifecycle.viewmodel.CreationExtras
66
import androidx.lifecycle.viewmodel.compose.viewModel
77

88
@Composable
9-
actual inline fun <reified VM : ViewModel> viewModel(noinline initializer: CreationExtras.() -> VM): VM =
10-
viewModel(initializer = initializer)
9+
actual inline fun <reified VM : ViewModel> viewModel(key: String?, noinline initializer: CreationExtras.() -> VM): VM =
10+
viewModel(key = key, initializer = initializer)

compose-multiplatform-lifecycle-viewmodel/src/commonMain/kotlin/ViewModel.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,7 @@ import androidx.lifecycle.viewmodel.CreationExtras
77
// https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-viewmodel.html
88

99
@Composable
10-
expect inline fun <reified VM : ViewModel> viewModel(noinline initializer: CreationExtras.() -> VM): VM
10+
expect inline fun <reified VM : ViewModel> viewModel(
11+
key: String? = null,
12+
noinline initializer: CreationExtras.() -> VM
13+
): VM
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package com.huanshankeji.androidx.lifecycle.viewmodel.compose
22

33
import androidx.compose.runtime.Composable
4+
import androidx.compose.runtime.remember
45
import androidx.lifecycle.ViewModel
56
import androidx.lifecycle.viewmodel.CreationExtras
67

78
@Composable
8-
actual inline fun <reified VM : ViewModel> viewModel(noinline initializer: CreationExtras.() -> VM): VM =
9-
CreationExtras.Empty.initializer()
9+
actual inline fun <reified VM : ViewModel> viewModel(key: String?, noinline initializer: CreationExtras.() -> VM): VM =
10+
remember(key) { CreationExtras.Empty.initializer() }

0 commit comments

Comments
 (0)