File tree Expand file tree Collapse file tree
app/src/main/java/xyz/junerver/composehooks/route
hooks/src/main/kotlin/xyz/junerver/compose/hooks Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11package xyz.junerver.composehooks.route
22
33import androidx.compose.runtime.Composable
4- import xyz.junerver.composehooks.HomeScreen
4+ import xyz.junerver.composehooks.example. HomeScreen
55import xyz.junerver.composehooks.example.RequestExampleList
66import xyz.junerver.composehooks.example.UseAsyncExample
77import xyz.junerver.composehooks.example.UseAutoResetExample
Original file line number Diff line number Diff line change 11package xyz.junerver.compose.hooks
22
3- import android.annotation.SuppressLint
43import androidx.compose.runtime.Composable
54import androidx.compose.runtime.LaunchedEffect
5+ import xyz.junerver.compose.hooks.utils.unwrap
66
77/*
88 Description: Alias for [LaunchedEffect]
@@ -12,7 +12,7 @@ import androidx.compose.runtime.LaunchedEffect
1212 Version: v1.0
1313*/
1414
15- @SuppressLint(" ComposableNaming" )
1615@Composable
17- fun useEffect (vararg deps : Any? , block : SuspendAsyncFn ) =
18- LaunchedEffect (keys = deps, block = block)
16+ fun useEffect (vararg deps : Any? , block : SuspendAsyncFn ) {
17+ LaunchedEffect (keys = unwrap(deps), block = block)
18+ }
Original file line number Diff line number Diff line change @@ -76,7 +76,7 @@ fun <T> useState(default: T & Any): MutableState<T & Any> {
7676 * @receiver
7777 */
7878@Composable
79- fun <T > useState (vararg keys : Any , factory : () -> T ): State <T > = remember(keys = keys) {
79+ fun <T > useState (vararg keys : Any? , factory : () -> T ): State <T > = remember(keys = keys) {
8080 derivedStateOf(factory)
8181}
8282
Original file line number Diff line number Diff line change 11package xyz.junerver.compose.hooks.utils
22
3+ import androidx.compose.runtime.Composable
4+ import androidx.compose.runtime.State
5+ import androidx.compose.runtime.snapshots.SnapshotStateList
36import kotlinx.datetime.Clock
47import kotlinx.datetime.Instant
8+ import xyz.junerver.compose.hooks.Ref
9+ import xyz.junerver.compose.hooks.observeAsState
510
611/*
712 Description:
@@ -13,3 +18,19 @@ import kotlinx.datetime.Instant
1318
1419internal val currentTime: Instant
1520 get() = Clock .System .now()
21+
22+ /* *
23+ * 直接使用[State]、[Ref] 作为依赖项无法触发副作用闭包执行,只有状态值、props入参变化才能正常触发,
24+ * 所以需要执行解包装操作,简化对副作用使用时的心智负担。
25+ *
26+ * 注意:只能监听 [Ref] 实例,如果你使用 `by` 关键字进行了对 [Ref] 的委托,将无法通过 [useEffect] 监听。
27+ */
28+ @Composable
29+ internal inline fun unwrap (deps : Array <out Any ?>) = deps.map {
30+ when (it) {
31+ is State <* > -> it.value
32+ is Ref <* > -> it.observeAsState().value
33+ is SnapshotStateList <* > -> it.toList()
34+ else -> it
35+ }
36+ }.toTypedArray()
You can’t perform that action at this time.
0 commit comments