Skip to content

Commit aeeed07

Browse files
committed
⚡️: refactor useRequest
1 parent 853f90c commit aeeed07

File tree

13 files changed

+68
-31
lines changed

13 files changed

+68
-31
lines changed

app/src/commonMain/kotlin/xyz/junerver/composehooks/example/request/Auto&Manual.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.compose.material3.HorizontalDivider
1111
import androidx.compose.material3.Surface
1212
import androidx.compose.material3.Text
1313
import androidx.compose.runtime.Composable
14+
import androidx.compose.runtime.getValue
1415
import androidx.compose.ui.Modifier
1516
import androidx.compose.ui.unit.dp
1617
import xyz.junerver.compose.hooks.invoke
@@ -45,14 +46,17 @@ fun AutoManual() {
4546

4647
@Composable
4748
fun Auto() {
48-
val (userInfo, loading, error) = useRequest(
49+
val (userInfoState, loadingState, errorState) = useRequest(
4950
// requestFn = NetApi::userInfo.asSuspendNoopFn(), // Make a request directly through the WebService instance
5051
requestFn = { NetApi.userInfo(it[0] as String) }, // Make a request WebService interface
5152
optionsOf = {
5253
defaultParams =
5354
arrayOf("junerver") // Automatically requests must set default parameters
5455
}
5556
)
57+
val userInfo by userInfoState
58+
val loading by loadingState
59+
val error by errorState
5660
Column {
5761
Text(text = "Auto:")
5862
Spacer(modifier = Modifier.height(10.dp))
@@ -63,14 +67,14 @@ fun Auto() {
6367
Text(text = userInfo.toString())
6468
}
6569
if (error.asBoolean()) {
66-
Text(text = "error: ${error.message}")
70+
Text(text = "error: ${error!!.message}")
6771
}
6872
}
6973
}
7074

7175
@Composable
7276
fun Manual() {
73-
val (repoInfo, loading, error, request) = useRequest(
77+
val (repoInfoState, loadingState, errorState, request) = useRequest(
7478
requestFn = { NetApi.repoInfo(it[0] as String, it[1] as String) },
7579
// 使用 `options = optionsOf {}`这种传参会带来性能问题,请尽快更新使用性能优化版本,你可以简单的在`optionsOf`后面加`=`来进行替换
7680
optionsOf = {
@@ -79,6 +83,9 @@ fun Manual() {
7983
defaultParams = arrayOf("junerver", "ComposeHooks") // Automatically requests must set default parameters
8084
}
8185
)
86+
val repoInfo by repoInfoState
87+
val loading by loadingState
88+
val error by errorState
8289
Surface {
8390
Column {
8491
Row {
@@ -103,7 +110,7 @@ fun Manual() {
103110
Text(text = "user info loading ...")
104111
}
105112
if (error.asBoolean()) {
106-
Text(text = "error: ${error.message}")
113+
Text(text = "error: ${error!!.message}")
107114
}
108115
if (repoInfo.asBoolean()) {
109116
Text(text = repoInfo.toString())

app/src/commonMain/kotlin/xyz/junerver/composehooks/example/request/Cache&SWR.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.compose.material3.HorizontalDivider
99
import androidx.compose.material3.Surface
1010
import androidx.compose.material3.Text
1111
import androidx.compose.runtime.Composable
12+
import androidx.compose.runtime.getValue
1213
import androidx.compose.ui.Modifier
1314
import androidx.compose.ui.graphics.Color
1415
import androidx.compose.ui.unit.dp
@@ -87,14 +88,16 @@ private fun TestSWR() {
8788
*/
8889
@Composable
8990
private fun SWR(useCache: Boolean = false) {
90-
val (data, loading) = useRequest(
91+
val (dataState, loadingState) = useRequest(
9192
requestFn = {
9293
mockRequestArticle()
9394
},
9495
optionsOf = {
9596
if (useCache) cacheKey = "test-swr-key"
9697
}
9798
)
99+
val data by dataState
100+
val loading by loadingState
98101
Column(modifier = Modifier.height(210.dp)) {
99102
Text(text = "cache: $useCache", color = Color.Red)
100103
Text(text = "Background loading: $loading")
@@ -129,7 +132,7 @@ fun TestStaleTime() {
129132

130133
@Composable
131134
private fun StaleTime(cacheKey: String) {
132-
val (data, loading) = useRequest(
135+
val (dataState, loadingState) = useRequest(
133136
requestFn = {
134137
mockRequestArticle()
135138
},
@@ -138,6 +141,8 @@ private fun StaleTime(cacheKey: String) {
138141
staleTime = 5.seconds
139142
}
140143
)
144+
val data by dataState
145+
val loading by loadingState
141146
Column(modifier = Modifier.height(210.dp)) {
142147
Text(text = "statleTime: 5s", color = Color.Red)
143148
Text(text = "Background loading: $loading")

app/src/commonMain/kotlin/xyz/junerver/composehooks/example/request/Cancel.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.compose.material3.HorizontalDivider
77
import androidx.compose.material3.Surface
88
import androidx.compose.material3.Text
99
import androidx.compose.runtime.Composable
10+
import androidx.compose.runtime.getValue
1011
import androidx.compose.ui.Modifier
1112
import xyz.junerver.compose.hooks.invoke
1213
import xyz.junerver.compose.hooks.userequest.useRequest
@@ -23,14 +24,15 @@ import xyz.junerver.composehooks.ui.component.TButton
2324
*/
2425
@Composable
2526
fun Cancel() {
26-
val (userInfo, loading, _, request, _, _, cancel) = useRequest(
27+
val (userInfoState, loadingState, _, request, _, _, cancel) = useRequest(
2728
requestFn = { NetApi.userInfo(it[0] as String) },
2829
optionsOf = {
2930
manual = true
3031
defaultParams = arrayOf("junerver")
3132
}
3233
)
33-
34+
val userInfo by userInfoState
35+
val loading by loadingState
3436
Surface {
3537
Column {
3638
Text(text = "loading : $loading")

app/src/commonMain/kotlin/xyz/junerver/composehooks/example/request/CustomPlugin.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package xyz.junerver.composehooks.example.request
22

33
import androidx.compose.runtime.Composable
4+
import androidx.compose.runtime.State
45
import androidx.compose.runtime.remember
56
import xyz.junerver.compose.hooks.MutableRef
67
import xyz.junerver.compose.hooks.Tuple8
@@ -41,7 +42,7 @@ typealias RollbackFn = () -> Unit
4142
fun <TData : Any> useCustomPluginRequest(
4243
requestFn: suspend (TParams) -> TData,
4344
optionsOf: RequestOptions<TData>.() -> Unit = {},
44-
): Tuple8<TData?, Boolean, Throwable?, ReqFn, MutateFn<TData>, RefreshFn, CancelFn, RollbackFn> {
45+
): Tuple8<State<TData?>, State<Boolean>, State<Throwable?>, ReqFn, MutateFn<TData>, RefreshFn, CancelFn, RollbackFn> {
4546
val rollbackRef = useRef(default = { })
4647
val requestHolder = useRequest(
4748
requestFn = requestFn,

app/src/commonMain/kotlin/xyz/junerver/composehooks/example/request/DepsRefresh.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.compose.foundation.layout.Column
44
import androidx.compose.material3.Surface
55
import androidx.compose.material3.Text
66
import androidx.compose.runtime.Composable
7+
import androidx.compose.runtime.getValue
78
import xyz.junerver.compose.hooks.useGetState
89
import xyz.junerver.compose.hooks.userequest.useRequest
910
import xyz.junerver.compose.hooks.utils.asBoolean
@@ -23,13 +24,15 @@ import xyz.junerver.composehooks.ui.component.TButton
2324
@Composable
2425
fun DepsRefresh() {
2526
val (state, setState, getState) = useGetState(0)
26-
val (userInfo, loading, error) = useRequest(
27+
val (userInfoState, loadingState, errorState) = useRequest(
2728
requestFn = { NetApi.userInfo(it[0] as String) },
2829
optionsOf = {
2930
defaultParams = arrayOf("junerver")
3031
refreshDeps = arrayOf(getState())
3132
}
3233
)
34+
val userInfo by userInfoState
35+
val loading by loadingState
3336
Surface {
3437
Column {
3538
Text("deps:${getState()}")

app/src/commonMain/kotlin/xyz/junerver/composehooks/example/request/ErrorRetry.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ suspend fun mockRequest(s1: String, s2: String): MockInfo {
5353
fun ErrorRetry() {
5454
var count by useState("")
5555

56-
val (mockInfo, stuLoading, err) = useRequest(
56+
val (mockInfoState, stuLoadingState, errState,) = useRequest(
5757
requestFn = {
5858
mockRequest(it[0] as String, it[1] as String)
5959
},
@@ -66,6 +66,9 @@ fun ErrorRetry() {
6666
}
6767
}
6868
)
69+
val mockInfo by mockInfoState
70+
val stuLoading by stuLoadingState
71+
val err by errState
6972
Surface {
7073
Column {
7174
Text("error time:\n$count")
@@ -74,7 +77,7 @@ fun ErrorRetry() {
7477
} else if (mockInfo.asBoolean()) {
7578
Text("MockSucc:${(mockInfo)}")
7679
} else if (err.asBoolean()) {
77-
Text(text = "Error msg: ${err.message}")
80+
Text(text = "Error msg: ${err!!.message}")
7881
}
7982
}
8083
}

app/src/commonMain/kotlin/xyz/junerver/composehooks/example/request/Mutate.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,14 @@ fun Mutate() {
8585
@Composable
8686
private fun ManualMutateRollback() {
8787
val (input, setInput) = useGetState("")
88-
val (userInfo, loading, _, _, mutate) = useRequest(
88+
val (userInfoState, loadingState, _, _, mutate) = useRequest(
8989
requestFn = { NetApi.userInfo(it[0] as String) },
9090
optionsOf = {
9191
defaultParams = arrayOf("junerver")
9292
}
9393
)
94+
val userInfo by userInfoState
95+
val loading by loadingState
9496

9597
fun mockFnChangeName(newName: String) {
9698
/**
@@ -144,13 +146,14 @@ private fun ManualMutateRollback() {
144146
@Composable
145147
private fun AutoRollback() {
146148
val (input, setInput) = useGetState("")
147-
val (userInfo, loading, _, _, mutate, _, _, triggerRollback) = useCustomPluginRequest(
149+
val (userInfoState, loadingState, _, _, mutate, _, _, triggerRollback) = useCustomPluginRequest(
148150
requestFn = { NetApi.userInfo(it[0] as String) },
149151
optionsOf = {
150152
defaultParams = arrayOf("junerver")
151153
}
152154
)
153-
155+
val userInfo by userInfoState
156+
val loading by loadingState
154157
fun mockFnChangeName(newName: String) {}
155158

156159
Column {

app/src/commonMain/kotlin/xyz/junerver/composehooks/example/request/Polling.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.height
66
import androidx.compose.material3.Surface
77
import androidx.compose.material3.Text
88
import androidx.compose.runtime.Composable
9+
import androidx.compose.runtime.getValue
910
import androidx.compose.ui.Modifier
1011
import androidx.compose.ui.graphics.Color
1112
import androidx.compose.ui.unit.dp
@@ -59,7 +60,7 @@ fun Sub(isPollingWhenHidden: Boolean = false) {
5960
var countRef by useRef(default = 0)
6061
val update = useUpdate()
6162
val post = useEventPublish<Int>()
62-
val (userInfo, loading) = useRequest(
63+
val (userInfoState, loadingState) = useRequest(
6364
requestFn = { NetApi.userInfo(it[0] as String) },
6465
optionsOf = {
6566
defaultParams = arrayOf("junerver")
@@ -72,6 +73,8 @@ fun Sub(isPollingWhenHidden: Boolean = false) {
7273
}
7374
}
7475
)
76+
val userInfo by userInfoState
77+
val loading by loadingState
7578
Column(modifier = Modifier.height(100.dp)) {
7679
Text(text = "Polling when hidden: $isPollingWhenHidden count: $countRef")
7780
Spacer(modifier = Modifier.height(20.dp))

app/src/commonMain/kotlin/xyz/junerver/composehooks/example/request/Ready.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.compose.material3.HorizontalDivider
88
import androidx.compose.material3.Surface
99
import androidx.compose.material3.Text
1010
import androidx.compose.runtime.Composable
11+
import androidx.compose.runtime.getValue
1112
import androidx.compose.ui.Modifier
1213
import androidx.compose.ui.unit.dp
1314
import xyz.junerver.compose.hooks.useGetState
@@ -28,7 +29,7 @@ import xyz.junerver.composehooks.net.NetApi
2829
@Composable
2930
fun Ready() {
3031
val (isReady, setReady) = useGetState(false)
31-
val (userInfo, userLoading) = useRequest(
32+
val (userInfoState, userLoadingState) = useRequest(
3233
requestFn = { NetApi.userInfo(it[0] as String) },
3334
optionsOf = {
3435
defaultParams = arrayOf("junerver")
@@ -37,8 +38,9 @@ fun Ready() {
3738
}
3839
}
3940
)
40-
41-
val (repoInfo, repoLoading) = useRequest(
41+
val userInfo by userInfoState
42+
val userLoading by userLoadingState
43+
val (repoInfoState, repoLoadingState) = useRequest(
4244
requestFn = { NetApi.repoInfo(it[0] as String, it[1] as String) },
4345
optionsOf = {
4446
defaultParams = arrayOf(
@@ -48,7 +50,8 @@ fun Ready() {
4850
ready = isReady.value
4951
}
5052
)
51-
53+
val repoInfo by repoInfoState
54+
val repoLoading by repoLoadingState
5255
Surface {
5356
Column {
5457
if (userLoading) {

app/src/commonMain/kotlin/xyz/junerver/composehooks/example/request/Refresh.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import xyz.junerver.composehooks.ui.component.TButton
2929
@Composable
3030
fun Refresh() {
3131
var params by useState("")
32-
val (userInfo, loading, error, request, _, refresh) = useRequest(
32+
val (userInfoState, loadingState, errorState, request, _, refresh) = useRequest(
3333
requestFn = { NetApi.userInfo(it[0] as String) },
3434
optionsOf = {
3535
defaultParams = arrayOf("junerver")
@@ -38,6 +38,9 @@ fun Refresh() {
3838
}
3939
}
4040
)
41+
val userInfo by userInfoState
42+
val loading by loadingState
43+
val error by errorState
4144
Surface {
4245
Column {
4346
Text(text = "Refresh: ")
@@ -54,7 +57,7 @@ fun Refresh() {
5457
Text(text = "current user: $params")
5558
Spacer(modifier = Modifier.height(15.dp))
5659
if (error.asBoolean()) {
57-
Text(text = "error: ${error.message}")
60+
Text(text = "error: ${error?.message}")
5861
}
5962
if (loading) {
6063
Text(text = "Loading ...")

app/src/commonMain/kotlin/xyz/junerver/composehooks/example/request/component.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.height
77
import androidx.compose.material3.HorizontalDivider
88
import androidx.compose.material3.Text
99
import androidx.compose.runtime.Composable
10+
import androidx.compose.runtime.getValue
1011
import androidx.compose.ui.Modifier
1112
import androidx.compose.ui.unit.dp
1213
import kotlin.time.Duration.Companion.seconds
@@ -53,7 +54,7 @@ fun Container(label: String, optionFunc: OptionFunc) {
5354

5455
@Composable
5556
fun SubComponent(label: String, isUsed: Boolean = false, optionFunc: OptionFunc) {
56-
val (userInfo, loading, _, request) = useRequest(
57+
val (userInfoState, loadingState, _, request) = useRequest(
5758
requestFn = { NetApi.userInfo(it[0] as String) },
5859
optionsOf = {
5960
defaultParams = arrayOf("junerver")
@@ -93,6 +94,8 @@ fun SubComponent(label: String, isUsed: Boolean = false, optionFunc: OptionFunc)
9394
useEventSubscribe { _: Unit ->
9495
request()
9596
}
97+
val userInfo by userInfoState
98+
val loading by loadingState
9699
Column(modifier = Modifier.height(100.dp)) {
97100
Text(text = "$label:$isUsed")
98101
if (loading) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ internal typealias TParams = Array<Any?> // 原函数可变长度的参数
2323

2424
// 对所有函数固定抽象
2525
internal typealias NormalFunction<TData> = (TParams) -> TData
26-
internal typealias SuspendNormalFunction<TData> = suspend (TParams) -> TData
26+
typealias SuspendNormalFunction<TData> = suspend (TParams) -> TData
2727
internal typealias VoidFunction = NormalFunction<Unit>
2828
internal typealias SuspendVoidFunction = SuspendNormalFunction<Unit>
2929

0 commit comments

Comments
 (0)