useTransition 用于将状态更新标记为非紧急的过渡更新,保持 UI 响应性。

useTransition Hook 详解

useTransition 用于将状态更新标记为非紧急的过渡更新,保持 UI 响应性。

// 基本语法

const [isPending, startTransition] = useTransition();

const handleClick = () => {
  // 紧急更新:立即响应
  setInputValue(value);

  // 过渡更新:可被中断
  startTransition(() => {
    setSearchResults(search(value));
  });
};

示例 1: 搜索过滤

项目 1

这是第 1 个项目的描述信息

项目 2

这是第 2 个项目的描述信息

项目 3

这是第 3 个项目的描述信息

项目 4

这是第 4 个项目的描述信息

项目 5

这是第 5 个项目的描述信息

项目 6

这是第 6 个项目的描述信息

项目 7

这是第 7 个项目的描述信息

项目 8

这是第 8 个项目的描述信息

项目 9

这是第 9 个项目的描述信息

项目 10

这是第 10 个项目的描述信息

项目 11

这是第 11 个项目的描述信息

项目 12

这是第 12 个项目的描述信息

项目 13

这是第 13 个项目的描述信息

项目 14

这是第 14 个项目的描述信息

项目 15

这是第 15 个项目的描述信息

项目 16

这是第 16 个项目的描述信息

项目 17

这是第 17 个项目的描述信息

项目 18

这是第 18 个项目的描述信息

项目 19

这是第 19 个项目的描述信息

项目 20

这是第 20 个项目的描述信息

项目 21

这是第 21 个项目的描述信息

项目 22

这是第 22 个项目的描述信息

项目 23

这是第 23 个项目的描述信息

项目 24

这是第 24 个项目的描述信息

项目 25

这是第 25 个项目的描述信息

项目 26

这是第 26 个项目的描述信息

项目 27

这是第 27 个项目的描述信息

项目 28

这是第 28 个项目的描述信息

项目 29

这是第 29 个项目的描述信息

项目 30

这是第 30 个项目的描述信息

项目 31

这是第 31 个项目的描述信息

项目 32

这是第 32 个项目的描述信息

项目 33

这是第 33 个项目的描述信息

项目 34

这是第 34 个项目的描述信息

项目 35

这是第 35 个项目的描述信息

项目 36

这是第 36 个项目的描述信息

项目 37

这是第 37 个项目的描述信息

项目 38

这是第 38 个项目的描述信息

项目 39

这是第 39 个项目的描述信息

项目 40

这是第 40 个项目的描述信息

项目 41

这是第 41 个项目的描述信息

项目 42

这是第 42 个项目的描述信息

项目 43

这是第 43 个项目的描述信息

项目 44

这是第 44 个项目的描述信息

项目 45

这是第 45 个项目的描述信息

项目 46

这是第 46 个项目的描述信息

项目 47

这是第 47 个项目的描述信息

项目 48

这是第 48 个项目的描述信息

项目 49

这是第 49 个项目的描述信息

项目 50

这是第 50 个项目的描述信息

项目 51

这是第 51 个项目的描述信息

项目 52

这是第 52 个项目的描述信息

项目 53

这是第 53 个项目的描述信息

项目 54

这是第 54 个项目的描述信息

项目 55

这是第 55 个项目的描述信息

项目 56

这是第 56 个项目的描述信息

项目 57

这是第 57 个项目的描述信息

项目 58

这是第 58 个项目的描述信息

项目 59

这是第 59 个项目的描述信息

项目 60

这是第 60 个项目的描述信息

项目 61

这是第 61 个项目的描述信息

项目 62

这是第 62 个项目的描述信息

项目 63

这是第 63 个项目的描述信息

项目 64

这是第 64 个项目的描述信息

项目 65

这是第 65 个项目的描述信息

项目 66

这是第 66 个项目的描述信息

项目 67

这是第 67 个项目的描述信息

项目 68

这是第 68 个项目的描述信息

项目 69

这是第 69 个项目的描述信息

项目 70

这是第 70 个项目的描述信息

项目 71

这是第 71 个项目的描述信息

项目 72

这是第 72 个项目的描述信息

项目 73

这是第 73 个项目的描述信息

项目 74

这是第 74 个项目的描述信息

项目 75

这是第 75 个项目的描述信息

项目 76

这是第 76 个项目的描述信息

项目 77

这是第 77 个项目的描述信息

项目 78

这是第 78 个项目的描述信息

项目 79

这是第 79 个项目的描述信息

项目 80

这是第 80 个项目的描述信息

项目 81

这是第 81 个项目的描述信息

项目 82

这是第 82 个项目的描述信息

项目 83

这是第 83 个项目的描述信息

项目 84

这是第 84 个项目的描述信息

项目 85

这是第 85 个项目的描述信息

项目 86

这是第 86 个项目的描述信息

项目 87

这是第 87 个项目的描述信息

项目 88

这是第 88 个项目的描述信息

项目 89

这是第 89 个项目的描述信息

项目 90

这是第 90 个项目的描述信息

项目 91

这是第 91 个项目的描述信息

项目 92

这是第 92 个项目的描述信息

项目 93

这是第 93 个项目的描述信息

项目 94

这是第 94 个项目的描述信息

项目 95

这是第 95 个项目的描述信息

项目 96

这是第 96 个项目的描述信息

项目 97

这是第 97 个项目的描述信息

项目 98

这是第 98 个项目的描述信息

项目 99

这是第 99 个项目的描述信息

项目 100

这是第 100 个项目的描述信息

测试方法: 快速输入文字,观察输入框的响应性。 启用 useTransition 时,输入框始终保持流畅;禁用时可能会卡顿。

示例 2: 标签页切换

首页 - 项目 1
首页 - 项目 2
首页 - 项目 3
首页 - 项目 4
首页 - 项目 5
首页 - 项目 6
首页 - 项目 7
首页 - 项目 8
首页 - 项目 9
首页 - 项目 10
首页 - 项目 11
首页 - 项目 12
首页 - 项目 13
首页 - 项目 14
首页 - 项目 15
首页 - 项目 16
首页 - 项目 17
首页 - 项目 18
首页 - 项目 19
首页 - 项目 20
首页 - 项目 21
首页 - 项目 22
首页 - 项目 23
首页 - 项目 24
首页 - 项目 25
首页 - 项目 26
首页 - 项目 27
首页 - 项目 28
首页 - 项目 29
首页 - 项目 30
首页 - 项目 31
首页 - 项目 32
首页 - 项目 33
首页 - 项目 34
首页 - 项目 35
首页 - 项目 36
首页 - 项目 37
首页 - 项目 38
首页 - 项目 39
首页 - 项目 40
首页 - 项目 41
首页 - 项目 42
首页 - 项目 43
首页 - 项目 44
首页 - 项目 45
首页 - 项目 46
首页 - 项目 47
首页 - 项目 48
首页 - 项目 49
首页 - 项目 50
首页 - 项目 51
首页 - 项目 52
首页 - 项目 53
首页 - 项目 54
首页 - 项目 55
首页 - 项目 56
首页 - 项目 57
首页 - 项目 58
首页 - 项目 59
首页 - 项目 60
首页 - 项目 61
首页 - 项目 62
首页 - 项目 63
首页 - 项目 64
首页 - 项目 65
首页 - 项目 66
首页 - 项目 67
首页 - 项目 68
首页 - 项目 69
首页 - 项目 70
首页 - 项目 71
首页 - 项目 72
首页 - 项目 73
首页 - 项目 74
首页 - 项目 75
首页 - 项目 76
首页 - 项目 77
首页 - 项目 78
首页 - 项目 79
首页 - 项目 80
首页 - 项目 81
首页 - 项目 82
首页 - 项目 83
首页 - 项目 84
首页 - 项目 85
首页 - 项目 86
首页 - 项目 87
首页 - 项目 88
首页 - 项目 89
首页 - 项目 90
首页 - 项目 91
首页 - 项目 92
首页 - 项目 93
首页 - 项目 94
首页 - 项目 95
首页 - 项目 96
首页 - 项目 97
首页 - 项目 98
首页 - 项目 99
首页 - 项目 100
首页 - 项目 101
首页 - 项目 102
首页 - 项目 103
首页 - 项目 104
首页 - 项目 105
首页 - 项目 106
首页 - 项目 107
首页 - 项目 108
首页 - 项目 109
首页 - 项目 110
首页 - 项目 111
首页 - 项目 112
首页 - 项目 113
首页 - 项目 114
首页 - 项目 115
首页 - 项目 116
首页 - 项目 117
首页 - 项目 118
首页 - 项目 119
首页 - 项目 120
首页 - 项目 121
首页 - 项目 122
首页 - 项目 123
首页 - 项目 124
首页 - 项目 125
首页 - 项目 126
首页 - 项目 127
首页 - 项目 128
首页 - 项目 129
首页 - 项目 130
首页 - 项目 131
首页 - 项目 132
首页 - 项目 133
首页 - 项目 134
首页 - 项目 135
首页 - 项目 136
首页 - 项目 137
首页 - 项目 138
首页 - 项目 139
首页 - 项目 140
首页 - 项目 141
首页 - 项目 142
首页 - 项目 143
首页 - 项目 144
首页 - 项目 145
首页 - 项目 146
首页 - 项目 147
首页 - 项目 148
首页 - 项目 149
首页 - 项目 150
首页 - 项目 151
首页 - 项目 152
首页 - 项目 153
首页 - 项目 154
首页 - 项目 155
首页 - 项目 156
首页 - 项目 157
首页 - 项目 158
首页 - 项目 159
首页 - 项目 160
首页 - 项目 161
首页 - 项目 162
首页 - 项目 163
首页 - 项目 164
首页 - 项目 165
首页 - 项目 166
首页 - 项目 167
首页 - 项目 168
首页 - 项目 169
首页 - 项目 170
首页 - 项目 171
首页 - 项目 172
首页 - 项目 173
首页 - 项目 174
首页 - 项目 175
首页 - 项目 176
首页 - 项目 177
首页 - 项目 178
首页 - 项目 179
首页 - 项目 180
首页 - 项目 181
首页 - 项目 182
首页 - 项目 183
首页 - 项目 184
首页 - 项目 185
首页 - 项目 186
首页 - 项目 187
首页 - 项目 188
首页 - 项目 189
首页 - 项目 190
首页 - 项目 191
首页 - 项目 192
首页 - 项目 193
首页 - 项目 194
首页 - 项目 195
首页 - 项目 196
首页 - 项目 197
首页 - 项目 198
首页 - 项目 199
首页 - 项目 200
首页 - 项目 201
首页 - 项目 202
首页 - 项目 203
首页 - 项目 204
首页 - 项目 205
首页 - 项目 206
首页 - 项目 207
首页 - 项目 208
首页 - 项目 209
首页 - 项目 210
首页 - 项目 211
首页 - 项目 212
首页 - 项目 213
首页 - 项目 214
首页 - 项目 215
首页 - 项目 216
首页 - 项目 217
首页 - 项目 218
首页 - 项目 219
首页 - 项目 220
首页 - 项目 221
首页 - 项目 222
首页 - 项目 223
首页 - 项目 224
首页 - 项目 225
首页 - 项目 226
首页 - 项目 227
首页 - 项目 228
首页 - 项目 229
首页 - 项目 230
首页 - 项目 231
首页 - 项目 232
首页 - 项目 233
首页 - 项目 234
首页 - 项目 235
首页 - 项目 236
首页 - 项目 237
首页 - 项目 238
首页 - 项目 239
首页 - 项目 240
首页 - 项目 241
首页 - 项目 242
首页 - 项目 243
首页 - 项目 244
首页 - 项目 245
首页 - 项目 246
首页 - 项目 247
首页 - 项目 248
首页 - 项目 249
首页 - 项目 250
首页 - 项目 251
首页 - 项目 252
首页 - 项目 253
首页 - 项目 254
首页 - 项目 255
首页 - 项目 256
首页 - 项目 257
首页 - 项目 258
首页 - 项目 259
首页 - 项目 260
首页 - 项目 261
首页 - 项目 262
首页 - 项目 263
首页 - 项目 264
首页 - 项目 265
首页 - 项目 266
首页 - 项目 267
首页 - 项目 268
首页 - 项目 269
首页 - 项目 270
首页 - 项目 271
首页 - 项目 272
首页 - 项目 273
首页 - 项目 274
首页 - 项目 275
首页 - 项目 276
首页 - 项目 277
首页 - 项目 278
首页 - 项目 279
首页 - 项目 280
首页 - 项目 281
首页 - 项目 282
首页 - 项目 283
首页 - 项目 284
首页 - 项目 285
首页 - 项目 286
首页 - 项目 287
首页 - 项目 288
首页 - 项目 289
首页 - 项目 290
首页 - 项目 291
首页 - 项目 292
首页 - 项目 293
首页 - 项目 294
首页 - 项目 295
首页 - 项目 296
首页 - 项目 297
首页 - 项目 298
首页 - 项目 299
首页 - 项目 300
首页 - 项目 301
首页 - 项目 302
首页 - 项目 303
首页 - 项目 304
首页 - 项目 305
首页 - 项目 306
首页 - 项目 307
首页 - 项目 308
首页 - 项目 309
首页 - 项目 310
首页 - 项目 311
首页 - 项目 312
首页 - 项目 313
首页 - 项目 314
首页 - 项目 315
首页 - 项目 316
首页 - 项目 317
首页 - 项目 318
首页 - 项目 319
首页 - 项目 320
首页 - 项目 321
首页 - 项目 322
首页 - 项目 323
首页 - 项目 324
首页 - 项目 325
首页 - 项目 326
首页 - 项目 327
首页 - 项目 328
首页 - 项目 329
首页 - 项目 330
首页 - 项目 331
首页 - 项目 332
首页 - 项目 333
首页 - 项目 334
首页 - 项目 335
首页 - 项目 336
首页 - 项目 337
首页 - 项目 338
首页 - 项目 339
首页 - 项目 340
首页 - 项目 341
首页 - 项目 342
首页 - 项目 343
首页 - 项目 344
首页 - 项目 345
首页 - 项目 346
首页 - 项目 347
首页 - 项目 348
首页 - 项目 349
首页 - 项目 350
首页 - 项目 351
首页 - 项目 352
首页 - 项目 353
首页 - 项目 354
首页 - 项目 355
首页 - 项目 356
首页 - 项目 357
首页 - 项目 358
首页 - 项目 359
首页 - 项目 360
首页 - 项目 361
首页 - 项目 362
首页 - 项目 363
首页 - 项目 364
首页 - 项目 365
首页 - 项目 366
首页 - 项目 367
首页 - 项目 368
首页 - 项目 369
首页 - 项目 370
首页 - 项目 371
首页 - 项目 372
首页 - 项目 373
首页 - 项目 374
首页 - 项目 375
首页 - 项目 376
首页 - 项目 377
首页 - 项目 378
首页 - 项目 379
首页 - 项目 380
首页 - 项目 381
首页 - 项目 382
首页 - 项目 383
首页 - 项目 384
首页 - 项目 385
首页 - 项目 386
首页 - 项目 387
首页 - 项目 388
首页 - 项目 389
首页 - 项目 390
首页 - 项目 391
首页 - 项目 392
首页 - 项目 393
首页 - 项目 394
首页 - 项目 395
首页 - 项目 396
首页 - 项目 397
首页 - 项目 398
首页 - 项目 399
首页 - 项目 400
首页 - 项目 401
首页 - 项目 402
首页 - 项目 403
首页 - 项目 404
首页 - 项目 405
首页 - 项目 406
首页 - 项目 407
首页 - 项目 408
首页 - 项目 409
首页 - 项目 410
首页 - 项目 411
首页 - 项目 412
首页 - 项目 413
首页 - 项目 414
首页 - 项目 415
首页 - 项目 416
首页 - 项目 417
首页 - 项目 418
首页 - 项目 419
首页 - 项目 420
首页 - 项目 421
首页 - 项目 422
首页 - 项目 423
首页 - 项目 424
首页 - 项目 425
首页 - 项目 426
首页 - 项目 427
首页 - 项目 428
首页 - 项目 429
首页 - 项目 430
首页 - 项目 431
首页 - 项目 432
首页 - 项目 433
首页 - 项目 434
首页 - 项目 435
首页 - 项目 436
首页 - 项目 437
首页 - 项目 438
首页 - 项目 439
首页 - 项目 440
首页 - 项目 441
首页 - 项目 442
首页 - 项目 443
首页 - 项目 444
首页 - 项目 445
首页 - 项目 446
首页 - 项目 447
首页 - 项目 448
首页 - 项目 449
首页 - 项目 450
首页 - 项目 451
首页 - 项目 452
首页 - 项目 453
首页 - 项目 454
首页 - 项目 455
首页 - 项目 456
首页 - 项目 457
首页 - 项目 458
首页 - 项目 459
首页 - 项目 460
首页 - 项目 461
首页 - 项目 462
首页 - 项目 463
首页 - 项目 464
首页 - 项目 465
首页 - 项目 466
首页 - 项目 467
首页 - 项目 468
首页 - 项目 469
首页 - 项目 470
首页 - 项目 471
首页 - 项目 472
首页 - 项目 473
首页 - 项目 474
首页 - 项目 475
首页 - 项目 476
首页 - 项目 477
首页 - 项目 478
首页 - 项目 479
首页 - 项目 480
首页 - 项目 481
首页 - 项目 482
首页 - 项目 483
首页 - 项目 484
首页 - 项目 485
首页 - 项目 486
首页 - 项目 487
首页 - 项目 488
首页 - 项目 489
首页 - 项目 490
首页 - 项目 491
首页 - 项目 492
首页 - 项目 493
首页 - 项目 494
首页 - 项目 495
首页 - 项目 496
首页 - 项目 497
首页 - 项目 498
首页 - 项目 499
首页 - 项目 500
说明: 每个标签页渲染 500 个项目。使用 useTransition 后, 切换标签时 UI 保持响应,不会冻结。

示例 3: 大量元素渲染

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

当前显示: 1,000 个元素

拖动滑块时,滑块本身保持流畅响应,元素渲染作为过渡更新在后台进行。

示例 4: 有无 Transition 对比

✅ 使用 useTransition

❌ 不使用 useTransition

观察: 快速输入时,左侧(使用 transition)的列表更新会稍微延迟, 但输入框保持流畅;两侧都会收到相同的最终结果。

使用指南

✅ 适合使用 useTransition

  • 搜索/过滤大量数据
  • 标签页/路由切换
  • 渲染大量 DOM 元素
  • 复杂 UI 状态更新

❌ 不适合使用

  • 用户输入值(需立即响应)
  • 表单验证状态
  • 网络请求本身
  • 受控组件的值