Skip to content

Commit 0986831

Browse files
committed
⚡️: refactor useImmutableList
1 parent 099ecbf commit 0986831

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

hooks/src/commonMain/kotlin/xyz/junerver/compose/hooks/useImmutableList.kt

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package xyz.junerver.compose.hooks
22

33
import androidx.compose.runtime.Composable
4-
import androidx.compose.runtime.MutableState
54
import androidx.compose.runtime.Stable
5+
import androidx.compose.runtime.State
66
import androidx.compose.runtime.remember
77
import androidx.compose.runtime.snapshots.SnapshotStateList
88
import kotlinx.collections.immutable.PersistentList
@@ -17,13 +17,6 @@ import kotlinx.collections.immutable.persistentListOf
1717
* @Description
1818
*/
1919

20-
@Stable
21-
class ImmutableListHolder<T>(val list: MutableState<PersistentList<T>>) {
22-
fun mutate(mutator: (MutableList<T>) -> Unit) {
23-
list.value = list.value.mutate(mutator)
24-
}
25-
}
26-
2720
/**
2821
* 这个 hook 不同于 [useList]。
2922
*
@@ -37,5 +30,15 @@ class ImmutableListHolder<T>(val list: MutableState<PersistentList<T>>) {
3730
@Composable
3831
fun <T> useImmutableList(vararg elements: T): ImmutableListHolder<T> {
3932
val state = _useState(persistentListOf(*elements))
40-
return remember { ImmutableListHolder(state) }
33+
34+
fun mutate(mutator: (MutableList<T>) -> Unit) {
35+
state.value = state.value.mutate(mutator)
36+
}
37+
return remember { ImmutableListHolder(state, ::mutate) }
4138
}
39+
40+
@Stable
41+
data class ImmutableListHolder<T>(
42+
val list: State<PersistentList<T>>,
43+
val mutate: (mutator: (MutableList<T>) -> Unit) -> Unit,
44+
)

0 commit comments

Comments
 (0)