@seakoi/native-ui 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/commonjs/components/base/carousel/carousel-indicator.js +56 -0
  3. package/dist/commonjs/components/base/carousel/carousel-slides.js +140 -0
  4. package/dist/commonjs/components/base/carousel/carousel.js +114 -122
  5. package/dist/commonjs/components/base/carousel/hooks/index.js +0 -14
  6. package/dist/commonjs/components/base/carousel/hooks/use-carousel-index.js +16 -13
  7. package/dist/commonjs/components/base/carousel/hooks/use-carousel-lifecycle.js +6 -2
  8. package/dist/commonjs/components/base/carousel/hooks/use-carousel-pan-responder.js +40 -12
  9. package/dist/commonjs/components/base/carousel/hooks/use-carousel-position.js +6 -2
  10. package/dist/commonjs/components/base/carousel/index.js +1 -15
  11. package/dist/commonjs/components/base/carousel/style/index.js +12 -0
  12. package/dist/commonjs/components/base/date-picker/date-picker.js +56 -44
  13. package/dist/commonjs/components/base/date-picker/date-range-picker.js +142 -50
  14. package/dist/commonjs/components/base/date-picker/style/index.js +15 -0
  15. package/dist/commonjs/components/base/date-picker-view/date-picker-view.js +19 -53
  16. package/dist/commonjs/components/base/date-picker-view/index.js +0 -22
  17. package/dist/commonjs/components/base/index.js +30 -8
  18. package/dist/commonjs/components/base/picker/index.js +26 -4
  19. package/dist/commonjs/components/base/picker/picker-content.js +60 -0
  20. package/dist/commonjs/components/base/picker/picker-context.js +9 -0
  21. package/dist/commonjs/components/base/picker/picker-field.js +37 -0
  22. package/dist/commonjs/components/base/picker/picker.js +22 -96
  23. package/dist/commonjs/components/base/picker/style/index.js +1 -3
  24. package/dist/commonjs/components/base/picker-backup/base-picker-container.js +50 -0
  25. package/dist/commonjs/components/base/picker-backup/index.js +27 -0
  26. package/dist/commonjs/components/base/picker-backup/picker-backup.js +75 -0
  27. package/dist/commonjs/components/base/picker-backup/picker-copy.js +106 -0
  28. package/dist/commonjs/components/base/{picker → picker-backup}/picker-trigger.js +5 -5
  29. package/dist/commonjs/components/base/picker-backup/style/index.js +19 -0
  30. package/dist/commonjs/components/base/picker-backup/utils.js +53 -0
  31. package/dist/commonjs/components/base/picker-view/picker-view-column.js +15 -0
  32. package/dist/commonjs/components/base/picker-view/picker-view.js +4 -4
  33. package/dist/commonjs/components/base/tag/index.js +20 -0
  34. package/dist/commonjs/components/base/tag/style/index.js +89 -0
  35. package/dist/commonjs/components/base/tag/tag-context.js +12 -0
  36. package/dist/commonjs/components/base/tag/tag-group.js +35 -0
  37. package/dist/commonjs/components/base/tag/tag.js +47 -0
  38. package/dist/commonjs/components/base/tag/types.js +5 -0
  39. package/dist/module/components/base/carousel/carousel-indicator.js +51 -0
  40. package/dist/module/components/base/carousel/carousel-slides.js +135 -0
  41. package/dist/module/components/base/carousel/carousel.js +116 -124
  42. package/dist/module/components/base/carousel/hooks/index.js +0 -2
  43. package/dist/module/components/base/carousel/hooks/use-carousel-index.js +15 -11
  44. package/dist/module/components/base/carousel/hooks/use-carousel-lifecycle.js +6 -2
  45. package/dist/module/components/base/carousel/hooks/use-carousel-pan-responder.js +40 -11
  46. package/dist/module/components/base/carousel/hooks/use-carousel-position.js +5 -1
  47. package/dist/module/components/base/carousel/index.js +1 -5
  48. package/dist/module/components/base/carousel/style/index.js +12 -0
  49. package/dist/module/components/base/date-picker/date-picker.js +60 -48
  50. package/dist/module/components/base/date-picker/date-range-picker.js +146 -54
  51. package/dist/module/components/base/date-picker/style/index.js +11 -0
  52. package/dist/module/components/base/date-picker-view/date-picker-view.js +23 -57
  53. package/dist/module/components/base/date-picker-view/index.js +1 -3
  54. package/dist/module/components/base/index.js +2 -0
  55. package/dist/module/components/base/picker/index.js +9 -1
  56. package/dist/module/components/base/picker/picker-content.js +54 -0
  57. package/dist/module/components/base/picker/picker-context.js +4 -0
  58. package/dist/module/components/base/picker/picker-field.js +32 -0
  59. package/dist/module/components/base/picker/picker.js +25 -99
  60. package/dist/module/components/base/picker/style/index.js +1 -3
  61. package/dist/module/components/base/picker-backup/base-picker-container.js +44 -0
  62. package/dist/module/components/base/picker-backup/index.js +4 -0
  63. package/dist/module/components/base/picker-backup/picker-backup.js +69 -0
  64. package/dist/module/components/base/picker-backup/picker-copy.js +101 -0
  65. package/dist/module/components/base/{picker → picker-backup}/picker-trigger.js +2 -2
  66. package/dist/module/components/base/picker-backup/style/index.js +15 -0
  67. package/dist/module/components/base/picker-backup/utils.js +48 -0
  68. package/dist/module/components/base/picker-view/picker-view-column.js +15 -0
  69. package/dist/module/components/base/picker-view/picker-view.js +4 -4
  70. package/dist/module/components/base/tag/index.js +5 -0
  71. package/dist/module/components/base/tag/style/index.js +85 -0
  72. package/dist/module/components/base/tag/tag-context.js +8 -0
  73. package/dist/module/components/base/tag/tag-group.js +29 -0
  74. package/dist/module/components/base/tag/tag.js +41 -0
  75. package/dist/module/components/base/tag/types.js +3 -0
  76. package/dist/typescript/components/base/carousel/carousel-indicator.d.ts +42 -0
  77. package/dist/typescript/components/base/carousel/carousel-indicator.d.ts.map +1 -0
  78. package/dist/typescript/components/base/carousel/carousel-slides.d.ts +49 -0
  79. package/dist/typescript/components/base/carousel/carousel-slides.d.ts.map +1 -0
  80. package/dist/typescript/components/base/carousel/carousel.d.ts +16 -11
  81. package/dist/typescript/components/base/carousel/carousel.d.ts.map +1 -1
  82. package/dist/typescript/components/base/carousel/hooks/index.d.ts +0 -2
  83. package/dist/typescript/components/base/carousel/hooks/index.d.ts.map +1 -1
  84. package/dist/typescript/components/base/carousel/hooks/use-carousel-index.d.ts.map +1 -1
  85. package/dist/typescript/components/base/carousel/hooks/use-carousel-lifecycle.d.ts.map +1 -1
  86. package/dist/typescript/components/base/carousel/hooks/use-carousel-pan-responder.d.ts.map +1 -1
  87. package/dist/typescript/components/base/carousel/hooks/use-carousel-position.d.ts.map +1 -1
  88. package/dist/typescript/components/base/carousel/index.d.ts +1 -4
  89. package/dist/typescript/components/base/carousel/index.d.ts.map +1 -1
  90. package/dist/typescript/components/base/carousel/style/index.d.ts +12 -0
  91. package/dist/typescript/components/base/carousel/style/index.d.ts.map +1 -1
  92. package/dist/typescript/components/base/carousel/types.d.ts +8 -17
  93. package/dist/typescript/components/base/carousel/types.d.ts.map +1 -1
  94. package/dist/typescript/components/base/date-picker/date-picker.d.ts +4 -2
  95. package/dist/typescript/components/base/date-picker/date-picker.d.ts.map +1 -1
  96. package/dist/typescript/components/base/date-picker/date-range-picker.d.ts +12 -3
  97. package/dist/typescript/components/base/date-picker/date-range-picker.d.ts.map +1 -1
  98. package/dist/typescript/components/base/date-picker/style/index.d.ts +9 -0
  99. package/dist/typescript/components/base/date-picker/style/index.d.ts.map +1 -0
  100. package/dist/typescript/components/base/date-picker-view/date-picker-view.d.ts +1 -6
  101. package/dist/typescript/components/base/date-picker-view/date-picker-view.d.ts.map +1 -1
  102. package/dist/typescript/components/base/date-picker-view/index.d.ts +0 -2
  103. package/dist/typescript/components/base/date-picker-view/index.d.ts.map +1 -1
  104. package/dist/typescript/components/base/date-picker-view/types.d.ts +1 -1
  105. package/dist/typescript/components/base/index.d.ts +2 -0
  106. package/dist/typescript/components/base/index.d.ts.map +1 -1
  107. package/dist/typescript/components/base/picker/index.d.ts +7 -1
  108. package/dist/typescript/components/base/picker/index.d.ts.map +1 -1
  109. package/dist/typescript/components/base/picker/picker-content.d.ts +15 -0
  110. package/dist/typescript/components/base/picker/picker-content.d.ts.map +1 -0
  111. package/dist/typescript/components/base/picker/picker-context.d.ts +18 -0
  112. package/dist/typescript/components/base/picker/picker-context.d.ts.map +1 -0
  113. package/dist/typescript/components/base/picker/picker-field.d.ts +10 -0
  114. package/dist/typescript/components/base/picker/picker-field.d.ts.map +1 -0
  115. package/dist/typescript/components/base/picker/picker.d.ts +13 -11
  116. package/dist/typescript/components/base/picker/picker.d.ts.map +1 -1
  117. package/dist/typescript/components/base/picker/style/index.d.ts +0 -2
  118. package/dist/typescript/components/base/picker/style/index.d.ts.map +1 -1
  119. package/dist/typescript/components/base/picker-backup/base-picker-container.d.ts +15 -0
  120. package/dist/typescript/components/base/picker-backup/base-picker-container.d.ts.map +1 -0
  121. package/dist/typescript/components/base/picker-backup/index.d.ts +3 -0
  122. package/dist/typescript/components/base/picker-backup/index.d.ts.map +1 -0
  123. package/dist/typescript/components/base/picker-backup/picker-backup.d.ts +26 -0
  124. package/dist/typescript/components/base/picker-backup/picker-backup.d.ts.map +1 -0
  125. package/dist/typescript/components/base/picker-backup/picker-copy.d.ts +13 -0
  126. package/dist/typescript/components/base/picker-backup/picker-copy.d.ts.map +1 -0
  127. package/dist/typescript/components/base/picker-backup/picker-trigger.d.ts.map +1 -0
  128. package/dist/typescript/components/base/picker-backup/style/index.d.ts +13 -0
  129. package/dist/typescript/components/base/picker-backup/style/index.d.ts.map +1 -0
  130. package/dist/typescript/components/base/picker-backup/utils.d.ts +8 -0
  131. package/dist/typescript/components/base/picker-backup/utils.d.ts.map +1 -0
  132. package/dist/typescript/components/base/picker-view/picker-view-column.d.ts.map +1 -1
  133. package/dist/typescript/components/base/picker-view/utils/picker.d.ts +3 -3
  134. package/dist/typescript/components/base/picker-view/utils/picker.d.ts.map +1 -1
  135. package/dist/typescript/components/base/tag/index.d.ts +5 -0
  136. package/dist/typescript/components/base/tag/index.d.ts.map +1 -0
  137. package/dist/typescript/components/base/tag/style/index.d.ts +61 -0
  138. package/dist/typescript/components/base/tag/style/index.d.ts.map +1 -0
  139. package/dist/typescript/components/base/tag/tag-context.d.ts +3 -0
  140. package/dist/typescript/components/base/tag/tag-context.d.ts.map +1 -0
  141. package/dist/typescript/components/base/tag/tag-group.d.ts +4 -0
  142. package/dist/typescript/components/base/tag/tag-group.d.ts.map +1 -0
  143. package/dist/typescript/components/base/tag/tag.d.ts +4 -0
  144. package/dist/typescript/components/base/tag/tag.d.ts.map +1 -0
  145. package/dist/typescript/components/base/tag/types.d.ts +48 -0
  146. package/dist/typescript/components/base/tag/types.d.ts.map +1 -0
  147. package/package.json +1 -1
  148. package/src/components/base/carousel/carousel-indicator.tsx +80 -0
  149. package/src/components/base/carousel/carousel-slides.tsx +177 -0
  150. package/src/components/base/carousel/carousel.tsx +108 -118
  151. package/src/components/base/carousel/hooks/index.ts +0 -2
  152. package/src/components/base/carousel/hooks/use-carousel-index.ts +13 -9
  153. package/src/components/base/carousel/hooks/use-carousel-lifecycle.ts +4 -3
  154. package/src/components/base/carousel/hooks/use-carousel-pan-responder.ts +40 -16
  155. package/src/components/base/carousel/hooks/use-carousel-position.ts +4 -1
  156. package/src/components/base/carousel/index.ts +1 -3
  157. package/src/components/base/carousel/style/index.ts +12 -0
  158. package/src/components/base/carousel/types.ts +8 -21
  159. package/src/components/base/date-picker/date-picker.tsx +64 -61
  160. package/src/components/base/date-picker/date-range-picker.tsx +178 -70
  161. package/src/components/base/date-picker/style/index.ts +10 -0
  162. package/src/components/base/date-picker-view/date-picker-view.tsx +21 -68
  163. package/src/components/base/date-picker-view/index.ts +0 -2
  164. package/src/components/base/date-picker-view/types.ts +1 -1
  165. package/src/components/base/index.ts +2 -0
  166. package/src/components/base/picker/index.ts +11 -1
  167. package/src/components/base/picker/picker-content.tsx +75 -0
  168. package/src/components/base/picker/picker-context.ts +19 -0
  169. package/src/components/base/picker/picker-field.tsx +50 -0
  170. package/src/components/base/picker/picker.tsx +38 -114
  171. package/src/components/base/picker/style/index.ts +0 -2
  172. package/src/components/base/picker-backup/base-picker-container.tsx +55 -0
  173. package/src/components/base/picker-backup/index.ts +2 -0
  174. package/src/components/base/picker-backup/picker-backup.tsx +110 -0
  175. package/src/components/base/picker-backup/picker-copy.tsx +125 -0
  176. package/src/components/base/{picker → picker-backup}/picker-trigger.tsx +2 -2
  177. package/src/components/base/picker-backup/style/index.ts +14 -0
  178. package/src/components/base/picker-backup/utils.ts +62 -0
  179. package/src/components/base/picker-view/picker-view-column.tsx +20 -0
  180. package/src/components/base/picker-view/picker-view.tsx +4 -4
  181. package/src/components/base/picker-view/utils/picker.ts +3 -5
  182. package/src/components/base/tag/index.ts +5 -0
  183. package/src/components/base/tag/style/index.tsx +84 -0
  184. package/src/components/base/tag/tag-context.ts +9 -0
  185. package/src/components/base/tag/tag-group.tsx +31 -0
  186. package/src/components/base/tag/tag.tsx +50 -0
  187. package/src/components/base/tag/types.ts +71 -0
  188. package/dist/commonjs/components/base/carousel/carousel-item.js +0 -45
  189. package/dist/commonjs/components/base/carousel/constants.js +0 -25
  190. package/dist/commonjs/components/base/carousel/hooks/use-carousel-indicator.js +0 -63
  191. package/dist/commonjs/components/base/carousel/hooks/use-carousel-slides.js +0 -95
  192. package/dist/commonjs/components/base/carousel/utils.js +0 -63
  193. package/dist/commonjs/components/base/date-picker-view/date-range-picker-view.js +0 -145
  194. package/dist/commonjs/components/base/date-picker-view/date-time-picker.js +0 -39
  195. package/dist/module/components/base/carousel/carousel-item.js +0 -40
  196. package/dist/module/components/base/carousel/constants.js +0 -21
  197. package/dist/module/components/base/carousel/hooks/use-carousel-indicator.js +0 -58
  198. package/dist/module/components/base/carousel/hooks/use-carousel-slides.js +0 -90
  199. package/dist/module/components/base/carousel/utils.js +0 -55
  200. package/dist/module/components/base/date-picker-view/date-range-picker-view.js +0 -138
  201. package/dist/module/components/base/date-picker-view/date-time-picker.js +0 -34
  202. package/dist/typescript/components/base/carousel/carousel-item.d.ts +0 -26
  203. package/dist/typescript/components/base/carousel/carousel-item.d.ts.map +0 -1
  204. package/dist/typescript/components/base/carousel/constants.d.ts +0 -17
  205. package/dist/typescript/components/base/carousel/constants.d.ts.map +0 -1
  206. package/dist/typescript/components/base/carousel/hooks/use-carousel-indicator.d.ts +0 -37
  207. package/dist/typescript/components/base/carousel/hooks/use-carousel-indicator.d.ts.map +0 -1
  208. package/dist/typescript/components/base/carousel/hooks/use-carousel-slides.d.ts +0 -51
  209. package/dist/typescript/components/base/carousel/hooks/use-carousel-slides.d.ts.map +0 -1
  210. package/dist/typescript/components/base/carousel/utils.d.ts +0 -25
  211. package/dist/typescript/components/base/carousel/utils.d.ts.map +0 -1
  212. package/dist/typescript/components/base/date-picker-view/date-range-picker-view.d.ts +0 -26
  213. package/dist/typescript/components/base/date-picker-view/date-range-picker-view.d.ts.map +0 -1
  214. package/dist/typescript/components/base/date-picker-view/date-time-picker.d.ts +0 -3
  215. package/dist/typescript/components/base/date-picker-view/date-time-picker.d.ts.map +0 -1
  216. package/dist/typescript/components/base/picker/picker-trigger.d.ts.map +0 -1
  217. package/src/components/base/carousel/carousel-item.tsx +0 -35
  218. package/src/components/base/carousel/constants.ts +0 -19
  219. package/src/components/base/carousel/hooks/use-carousel-indicator.tsx +0 -84
  220. package/src/components/base/carousel/hooks/use-carousel-slides.tsx +0 -131
  221. package/src/components/base/carousel/utils.ts +0 -55
  222. package/src/components/base/date-picker-view/date-range-picker-view.tsx +0 -191
  223. package/src/components/base/date-picker-view/date-time-picker.tsx +0 -34
  224. /package/dist/typescript/components/base/{picker → picker-backup}/picker-trigger.d.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  本文档记录了项目的所有重要变更。
4
4
 
5
+ # [1.2.0](https://gitlab.seakoi.net/digiziting_client/native-ui/compare/@seakoi/native-ui@1.1.3...@seakoi/native-ui@1.2.0) (2026-03-05)
6
+
7
+
8
+ ### ♻️Code Refactoring
9
+
10
+ * **wip:** 调整 Picker 组件功能 (By [@dengrenshan](https://gitlab.seakoi.net/dengrenshan)) ([d93633a9](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/d93633a91a98e5ba1ece4f9cf3f747ecac795770))
11
+ * **native-ui, website, example:** 重构选择器组件架构,统一日期选择器实现 (By [@xuzhijun](https://gitlab.seakoi.net/xuzhijun)) ([4c84b452](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/4c84b4522503931fef32af7baa9987875b410f9f))
12
+
13
+
14
+ ### ✨Features
15
+
16
+ * **native-ui:** carousel 代码重构,仅支持 data + renderItem 方式 (By [@caoguizhi](https://gitlab.seakoi.net/caoguizhi)) ([31218fe5](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/31218fe54ea5dd7f21fcba5ce84073798af4c9e4))
17
+ * 增加一个tag组件 (By [@gtian](https://gitlab.seakoi.net/gtian)) ([69999695](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/69999695bdfe974db0b3f70f1fd6e4ae1a55cb5c))
18
+ * **example,native-ui:** 支持自定义字段名映射 (By [@xuzhijun](https://gitlab.seakoi.net/xuzhijun)) ([40ee0370](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/40ee03702c9bbac65eab10dce41294e2b5707ff6))
19
+ * 新增tag组件 (By [@gtian](https://gitlab.seakoi.net/gtian)) ([65e9d743](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/65e9d743e72be4f5cd9bdf99eb6355b1c8b2784f))
20
+ * **picker:** 重构 Picker 组件以使用基础容器抽象 (By [@xuzhijun](https://gitlab.seakoi.net/xuzhijun)) ([749a6263](https://gitlab.seakoi.net/digiziting_client/native-ui/commit/749a62634803081b799ba0f2bc21f6ca3b82e98d))
21
+
5
22
  ## [1.1.3](https://gitlab.seakoi.net/digiziting_client/native-ui/compare/@seakoi/native-ui@1.1.2...@seakoi/native-ui@1.1.3) (2026-03-02)
6
23
 
7
24
 
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CarouselIndicator = void 0;
7
+ var _reactNative = require("react-native");
8
+ var _jsxRuntime = require("react/jsx-runtime");
9
+ /**
10
+ * 轮播图指示器渲染组件
11
+ *
12
+ * 负责渲染轮播图底部的指示器(小圆点),支持自定义指示器或使用默认样式。
13
+ * 当轮播项总数小于等于 1 时,不显示指示器。
14
+ *
15
+ * @param props - 组件属性配置
16
+ * @param props.indicator - 指示器配置(false 表示不显示,函数表示自定义渲染)
17
+ * @param props.indicatorProps - 指示器属性配置(颜色、样式)
18
+ * @param props.total - 轮播项总数
19
+ * @param props.current - 当前激活的索引
20
+ * @param props.activeColor - 激活状态的指示器颜色
21
+ * @param props.inactiveColor - 非激活状态的指示器颜色
22
+ * @param props.styles - 指示器样式对象
23
+ *
24
+ * @returns 渲染的指示器内容或 null
25
+ */
26
+ const CarouselIndicator = props => {
27
+ const {
28
+ indicator,
29
+ indicatorProps,
30
+ total,
31
+ current,
32
+ activeColor,
33
+ inactiveColor,
34
+ styles
35
+ } = props;
36
+ if (indicator === false) return null;
37
+ if (total <= 1) return null;
38
+ if (typeof indicator === 'function') {
39
+ return indicator(total, current);
40
+ }
41
+ const dotActiveColor = indicatorProps?.color ?? activeColor;
42
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
43
+ style: [styles.indicatorContainer, indicatorProps?.style],
44
+ children: Array.from({
45
+ length: total
46
+ }, (_, i) => {
47
+ const isActive = i === current;
48
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
49
+ style: [styles.indicatorDot, {
50
+ backgroundColor: isActive ? dotActiveColor : inactiveColor
51
+ }, isActive && styles.indicatorDotActive]
52
+ }, i);
53
+ })
54
+ });
55
+ };
56
+ exports.CarouselIndicator = CarouselIndicator;
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CarouselSlides = void 0;
7
+ var _ahooks = require("ahooks");
8
+ var _lodashEs = require("lodash-es");
9
+ var _react = require("react");
10
+ var _reactNative = require("react-native");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ /**
13
+ * 轮播图滑块渲染组件
14
+ *
15
+ * 负责渲染轮播图的滑块内容,使用 data + renderItem 模式。
16
+ * 实现虚拟渲染优化,仅渲染可见范围内的滑块,并处理循环播放时的克隆逻辑。
17
+ * 为虚拟渲染添加前后占位空间,确保滚动位置正确。
18
+ *
19
+ * @template Data - 数据项类型
20
+ * @param props - 组件属性配置
21
+ * @param props.data - 数据源数组
22
+ * @param props.renderItem - 渲染每一项的函数
23
+ * @param props.total - 轮播项总数
24
+ * @param props.virtualRange - 虚拟渲染范围(start、end、isVirtual)
25
+ * @param props.loopEnabled - 是否启用循环播放
26
+ * @param props.clonesBefore - 循环播放时前置克隆节点数量
27
+ * @param props.direction - 滑动方向
28
+ * @param props.slidePixels - 单个滑块的像素大小
29
+ * @param props.extTotal - 扩展后的总数(包含克隆节点)
30
+ *
31
+ * @returns 渲染的滑块内容或 null
32
+ */
33
+ const CarouselSlides = props => {
34
+ const {
35
+ data,
36
+ renderItem,
37
+ total,
38
+ virtualRange,
39
+ loopEnabled,
40
+ clonesBefore,
41
+ direction,
42
+ slidePixels,
43
+ extTotal
44
+ } = props;
45
+
46
+ // 计算滑块包装器样式
47
+ const slideWrapperStyle = (0, _react.useMemo)(() => {
48
+ return direction === 'horizontal' ? {
49
+ width: slidePixels,
50
+ height: '100%'
51
+ } : {
52
+ height: slidePixels,
53
+ width: '100%'
54
+ };
55
+ }, [direction, slidePixels]);
56
+
57
+ // 计算虚拟渲染的占位空间样式
58
+ const spacerStyles = (0, _react.useMemo)(() => {
59
+ if (!virtualRange) return null;
60
+ const {
61
+ start,
62
+ end
63
+ } = virtualRange;
64
+ const leadingSize = start * slidePixels;
65
+ const trailingSize = (extTotal - end - 1) * slidePixels;
66
+ return {
67
+ leading: direction === 'horizontal' ? {
68
+ width: leadingSize
69
+ } : {
70
+ height: leadingSize
71
+ },
72
+ trailing: direction === 'horizontal' ? {
73
+ width: trailingSize
74
+ } : {
75
+ height: trailingSize
76
+ },
77
+ leadingSize,
78
+ trailingSize
79
+ };
80
+ }, [virtualRange, slidePixels, extTotal, direction]);
81
+ const getIndexFromExtIndex = (0, _ahooks.useMemoizedFn)(extIndex => {
82
+ if (!loopEnabled) return (0, _lodashEs.clamp)(extIndex, 0, total - 1);
83
+ if (extIndex < clonesBefore) {
84
+ return ((extIndex - clonesBefore) % total + total) % total;
85
+ }
86
+ if (extIndex >= clonesBefore + total) {
87
+ return (extIndex - clonesBefore - total) % total;
88
+ }
89
+ return extIndex - clonesBefore;
90
+ });
91
+
92
+ // 渲染滑块元素
93
+ const slideElements = (0, _react.useMemo)(() => {
94
+ if (!virtualRange) return null;
95
+ const {
96
+ start,
97
+ end
98
+ } = virtualRange;
99
+ const elements = [];
100
+ const getElementForExtIndex = extIndex => {
101
+ const logicalIndex = loopEnabled ? getIndexFromExtIndex(extIndex) : (0, _lodashEs.clamp)(extIndex, 0, total - 1);
102
+ const item = data[logicalIndex];
103
+ return renderItem(item, logicalIndex);
104
+ };
105
+ for (let extIndex = start; extIndex <= end; extIndex += 1) {
106
+ const element = getElementForExtIndex(extIndex);
107
+ if (!element) continue;
108
+ elements.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
109
+ style: slideWrapperStyle,
110
+ children: element
111
+ }, extIndex));
112
+ }
113
+ return elements;
114
+ }, [virtualRange, loopEnabled, total, data, renderItem, slideWrapperStyle, getIndexFromExtIndex]);
115
+
116
+ // 前置占位空间
117
+ const leadSpacer = (0, _react.useMemo)(() => {
118
+ if (!virtualRange?.isVirtual || !spacerStyles || spacerStyles.leadingSize <= 0) {
119
+ return null;
120
+ }
121
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
122
+ style: spacerStyles.leading
123
+ });
124
+ }, [virtualRange?.isVirtual, spacerStyles]);
125
+
126
+ // 后置占位空间
127
+ const trailSpacer = (0, _react.useMemo)(() => {
128
+ if (!virtualRange?.isVirtual || !spacerStyles || spacerStyles.trailingSize <= 0) {
129
+ return null;
130
+ }
131
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
132
+ style: spacerStyles.trailing
133
+ });
134
+ }, [virtualRange?.isVirtual, spacerStyles]);
135
+ if (!virtualRange) return null;
136
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
137
+ children: [leadSpacer, slideElements, trailSpacer]
138
+ });
139
+ };
140
+ exports.CarouselSlides = CarouselSlides;
@@ -8,11 +8,18 @@ var _lodashEs = require("lodash-es");
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _reactNative = require("react-native");
10
10
  var _index = require("../../../native-provider/index.js");
11
+ var _carouselIndicator = require("./carousel-indicator.js");
12
+ var _carouselSlides = require("./carousel-slides.js");
11
13
  var _index2 = require("./hooks/index.js");
12
14
  var _index3 = require("./style/index.js");
13
- var _utils = require("./utils.js");
14
15
  var _jsxRuntime = require("react/jsx-runtime");
15
16
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
17
+ /**
18
+ * 虚拟渲染触发阈值
19
+ * 当轮播项数量超过此值时启用虚拟渲染优化
20
+ */
21
+ const VIRTUAL_RENDER_THRESHOLD = 10;
22
+
16
23
  /**
17
24
  * 轮播图组件
18
25
  *
@@ -21,20 +28,25 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
21
28
  * @example
22
29
  * ```tsx
23
30
  * // 基础用法
24
- * <Carousel>
25
- * <Carousel.Item><View /></Carousel.Item>
26
- * <Carousel.Item><View /></Carousel.Item>
27
- * </Carousel>
31
+ * <Carousel
32
+ * data={[1, 2, 3]}
33
+ * renderItem={(item) => <View><Text>{item}</Text></View>}
34
+ * />
28
35
  *
29
36
  * // 循环播放和自动轮播
30
- * <Carousel loop autoplay autoplayInterval={3000}>
31
- * {items.map(item => <Carousel.Item key={item.id}>{item.content}</Carousel.Item>)}
32
- * </Carousel>
37
+ * <Carousel
38
+ * data={items}
39
+ * renderItem={(item) => <View>{item.content}</View>}
40
+ * loop
41
+ * autoplay
42
+ * autoplayInterval={3000}
43
+ * />
33
44
  *
34
45
  * // 虚拟渲染(大量数据)
35
- * <Carousel total={1000}>
36
- * {(index) => <Carousel.Item><Text>{index}</Text></Carousel.Item>}
37
- * </Carousel>
46
+ * <Carousel
47
+ * data={largeDataArray}
48
+ * renderItem={(item, index) => <View><Text>{index}: {item}</Text></View>}
49
+ * />
38
50
  * ```
39
51
  *
40
52
  * @param props - 组件属性
@@ -56,35 +68,43 @@ const Carousel = props => {
56
68
  stuckAtBoundary = true,
57
69
  rubberband = true,
58
70
  virtualOverscan = 2,
59
- total: totalProp,
60
- children,
71
+ data,
72
+ renderItem,
61
73
  style,
62
74
  blockNativeResponder = true,
63
75
  ref
64
76
  } = props;
65
77
  const styles = (0, _index3.useCarouselStyles)();
66
78
  const theme = (0, _index.useTheme)();
79
+
80
+ // 使用 state 存储 layout,使依赖更明确
67
81
  const [layout, setLayout] = (0, _react.useState)({
68
82
  width: 0,
69
83
  height: 0
70
84
  });
71
- const [dragging, setDragging] = (0, _react.useState)(false);
72
- const [animating, setAnimating] = (0, _react.useState)(false);
73
- const normalizedSlideSize = (0, _react.useMemo)(() => {
74
- if (!Number.isFinite(slideSize)) return 100;
75
- return (0, _lodashEs.clamp)(slideSize, 0, 100);
76
- }, [slideSize]);
77
- const normalizedTrackOffset = (0, _react.useMemo)(() => {
85
+
86
+ // 分离拖动和动画状态,避免状态冲突
87
+ const [isDragging, setIsDragging] = (0, _react.useState)(false);
88
+ const [isAnimating, setIsAnimating] = (0, _react.useState)(false);
89
+
90
+ // 合并归一化计算,减少 useMemo 调用
91
+ const {
92
+ normalizedSlideSize,
93
+ normalizedTrackOffset
94
+ } = (0, _react.useMemo)(() => {
95
+ const slideSize_ = Number.isFinite(slideSize) ? (0, _lodashEs.clamp)(slideSize, 0, 100) : 100;
96
+ let trackOffset_;
78
97
  if (stuckAtBoundary) {
79
- return 100 - normalizedSlideSize;
98
+ trackOffset_ = 100 - slideSize_;
99
+ } else {
100
+ trackOffset_ = Number.isFinite(trackOffset) ? (0, _lodashEs.clamp)(trackOffset, 0, 100 - slideSize_) : 0;
80
101
  }
81
- if (!Number.isFinite(trackOffset)) return 0;
82
- return (0, _lodashEs.clamp)(trackOffset, 0, 100 - normalizedSlideSize);
83
- }, [normalizedSlideSize, trackOffset, stuckAtBoundary]);
84
- const total = (0, _react.useMemo)(() => {
85
- const normalizedDefault = (0, _utils.getDefaultTotal)(children);
86
- return totalProp ?? normalizedDefault;
87
- }, [children, totalProp]);
102
+ return {
103
+ normalizedSlideSize: slideSize_,
104
+ normalizedTrackOffset: trackOffset_
105
+ };
106
+ }, [slideSize, trackOffset, stuckAtBoundary]);
107
+ const total = data.length;
88
108
  const loopEnabled = loop && total > 1;
89
109
 
90
110
  // 计算循环播放时需要克隆的前置节点数量
@@ -105,16 +125,22 @@ const Carousel = props => {
105
125
  return Math.max(1, trailingSlides + 1);
106
126
  }, [loopEnabled, normalizedSlideSize, normalizedTrackOffset]);
107
127
  const extTotal = loopEnabled ? total + clonesBefore + clonesAfter : total;
108
- const slidePixels = (0, _react.useMemo)(() => {
109
- const trackSize = direction === 'horizontal' ? layout.width : layout.height;
110
- if (trackSize <= 0) return 0;
111
- return trackSize * (normalizedSlideSize / 100);
112
- }, [direction, layout.height, layout.width, normalizedSlideSize]);
113
- const trackOffsetPixels = (0, _react.useMemo)(() => {
128
+
129
+ // 合并像素计算,减少重复的 trackSize 获取
130
+ const {
131
+ slidePixels,
132
+ trackOffsetPixels
133
+ } = (0, _react.useMemo)(() => {
114
134
  const trackSize = direction === 'horizontal' ? layout.width : layout.height;
115
- if (trackSize <= 0) return 0;
116
- return trackSize * (normalizedTrackOffset / 100);
117
- }, [direction, layout.height, layout.width, normalizedTrackOffset]);
135
+ if (trackSize <= 0) return {
136
+ slidePixels: 0,
137
+ trackOffsetPixels: 0
138
+ };
139
+ return {
140
+ slidePixels: trackSize * (normalizedSlideSize / 100),
141
+ trackOffsetPixels: trackSize * (normalizedTrackOffset / 100)
142
+ };
143
+ }, [direction, layout, normalizedSlideSize, normalizedTrackOffset]);
118
144
  const {
119
145
  current,
120
146
  updateCurrent,
@@ -145,6 +171,14 @@ const Carousel = props => {
145
171
  setPositionImmediate
146
172
  } = (0, _index2.useCarouselPosition)();
147
173
 
174
+ // 状态设置函数
175
+ const setDragging = (0, _react.useCallback)(dragging => {
176
+ setIsDragging(dragging);
177
+ }, []);
178
+ const setAnimating = (0, _react.useCallback)(animating => {
179
+ setIsAnimating(animating);
180
+ }, []);
181
+
148
182
  // 切换逻辑
149
183
  const {
150
184
  swipeNext,
@@ -173,7 +207,7 @@ const Carousel = props => {
173
207
  autoplay,
174
208
  autoplayInterval,
175
209
  total,
176
- dragging,
210
+ dragging: isDragging,
177
211
  current,
178
212
  swipeNext,
179
213
  swipePrev
@@ -197,11 +231,13 @@ const Carousel = props => {
197
231
  height
198
232
  } = e.nativeEvent.layout;
199
233
  setLayout(prev => {
200
- if (prev.width === width && prev.height === height) return prev;
201
- return {
202
- width,
203
- height
204
- };
234
+ if (prev.width !== width || prev.height !== height) {
235
+ return {
236
+ width,
237
+ height
238
+ };
239
+ }
240
+ return prev;
205
241
  });
206
242
  }, []);
207
243
  const panResponder = (0, _index2.useCarouselPanResponder)({
@@ -236,15 +272,17 @@ const Carousel = props => {
236
272
  }, [direction, position, trackOffsetPixels]);
237
273
 
238
274
  // 计算虚拟渲染的范围
239
- // 注意: extIndexRef 的变化不会触发重新计算,
240
- // 通过 dragging 和 animating 状态的变化来触发虚拟范围的更新
275
+ // 使用 current 状态而不是 extIndexRef,确保虚拟范围与当前索引同步
241
276
  const virtualRange = (0, _react.useMemo)(() => {
242
277
  if (total <= 0 || slidePixels <= 0) {
243
278
  return null;
244
279
  }
245
- const isVirtual = (0, _utils.isRenderPropChildren)(children) && typeof totalProp === 'number';
246
- const effectiveOverscan = isVirtual ? Math.max(virtualOverscan, dragging || animating ? 1 : 0) : virtualOverscan;
247
- const currentExtIndex = extIndexRef.current;
280
+ const isVirtual = total > VIRTUAL_RENDER_THRESHOLD;
281
+ const isInteracting = isDragging || isAnimating;
282
+ const effectiveOverscan = isVirtual ? Math.max(virtualOverscan, isInteracting ? 1 : 0) : virtualOverscan;
283
+
284
+ // 使用 current 计算 extIndex,确保响应式更新
285
+ const currentExtIndex = loopEnabled ? current + clonesBefore : current;
248
286
  const start = isVirtual ? (0, _lodashEs.clamp)(currentExtIndex - effectiveOverscan, 0, extTotal - 1) : 0;
249
287
  const end = isVirtual ? (0, _lodashEs.clamp)(currentExtIndex + effectiveOverscan, 0, extTotal - 1) : extTotal - 1;
250
288
  return {
@@ -252,87 +290,41 @@ const Carousel = props => {
252
290
  end,
253
291
  isVirtual
254
292
  };
255
- }, [total, slidePixels, children, totalProp, virtualOverscan, dragging, animating, extIndexRef,
256
- // 保留以表明依赖关系,虽然不会触发更新
257
- extTotal]);
293
+ }, [total, slidePixels, virtualOverscan, isDragging, isAnimating, current, loopEnabled, clonesBefore, extTotal]);
294
+ const trackInnerStyle = direction === 'horizontal' ? styles.trackInnerHorizontal : styles.trackInnerVertical;
258
295
 
259
- // 计算滑块包装器样式
260
- const slideWrapperStyle = (0, _react.useMemo)(() => {
261
- return direction === 'horizontal' ? {
262
- width: slidePixels,
263
- height: '100%'
264
- } : {
265
- height: slidePixels,
266
- width: '100%'
267
- };
268
- }, [direction, slidePixels]);
269
-
270
- // 计算虚拟渲染的占位空间样式
271
- const spacerStyles = (0, _react.useMemo)(() => {
272
- if (!virtualRange) return null;
273
- const {
274
- start,
275
- end
276
- } = virtualRange;
277
- const leadingSize = start * slidePixels;
278
- const trailingSize = (extTotal - end - 1) * slidePixels;
279
- return {
280
- leading: direction === 'horizontal' ? {
281
- width: leadingSize
282
- } : {
283
- height: leadingSize
284
- },
285
- trailing: direction === 'horizontal' ? {
286
- width: trailingSize
287
- } : {
288
- height: trailingSize
289
- },
290
- leadingSize,
291
- trailingSize
292
- };
293
- }, [virtualRange, slidePixels, extTotal, direction]);
294
- const {
295
- renderSlides
296
- } = (0, _index2.useCarouselSlides)({
297
- children,
298
- total,
299
- virtualRange,
300
- loopEnabled,
301
- clonesBefore,
302
- slideWrapperStyle,
303
- spacerStyles,
304
- slideStyles: styles
305
- });
306
- const {
307
- renderIndicator
308
- } = (0, _index2.useCarouselIndicator)({
309
- indicator,
310
- indicatorProps,
311
- total,
312
- current,
313
- activeColor: theme.palette.brand7,
314
- inactiveColor: theme.palette.fontGray5,
315
- styles
316
- });
317
- const trackInnerStyle = (0, _react.useMemo)(() => {
318
- return direction === 'horizontal' ? {
319
- flexDirection: 'row',
320
- height: '100%'
321
- } : {
322
- flexDirection: 'column',
323
- width: '100%'
324
- };
325
- }, [direction]);
296
+ // 边界情况处理:空数据
297
+ if (!data || data.length === 0) {
298
+ return null;
299
+ }
326
300
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
327
- style: _reactNative.StyleSheet.flatten([styles.container, style]),
301
+ style: [styles.container, style],
328
302
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
329
303
  style: styles.track,
330
304
  onLayout: onLayoutTrack,
331
305
  ...panResponder?.panHandlers,
332
306
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
333
- style: _reactNative.StyleSheet.flatten([styles.trackInner, trackInnerStyle, trackTransformStyle]),
334
- children: renderSlides()
335
- }), renderIndicator()]
307
+ style: [styles.trackInner, trackInnerStyle, trackTransformStyle],
308
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_carouselSlides.CarouselSlides, {
309
+ data: data,
310
+ renderItem: renderItem,
311
+ total: total,
312
+ virtualRange: virtualRange,
313
+ loopEnabled: loopEnabled,
314
+ clonesBefore: clonesBefore,
315
+ direction: direction,
316
+ slidePixels: slidePixels,
317
+ extTotal: extTotal
318
+ })
319
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_carouselIndicator.CarouselIndicator, {
320
+ indicator: indicator,
321
+ indicatorProps: indicatorProps,
322
+ total: total,
323
+ current: current,
324
+ activeColor: theme.palette.brand7,
325
+ inactiveColor: theme.palette.fontGray5,
326
+ styles: styles
327
+ })]
336
328
  })
337
329
  });
338
330
  };
@@ -15,12 +15,6 @@ Object.defineProperty(exports, "useCarouselIndex", {
15
15
  return _useCarouselIndex.useCarouselIndex;
16
16
  }
17
17
  });
18
- Object.defineProperty(exports, "useCarouselIndicator", {
19
- enumerable: true,
20
- get: function () {
21
- return _useCarouselIndicator.useCarouselIndicator;
22
- }
23
- });
24
18
  Object.defineProperty(exports, "useCarouselLifecycle", {
25
19
  enumerable: true,
26
20
  get: function () {
@@ -39,12 +33,6 @@ Object.defineProperty(exports, "useCarouselPosition", {
39
33
  return _useCarouselPosition.useCarouselPosition;
40
34
  }
41
35
  });
42
- Object.defineProperty(exports, "useCarouselSlides", {
43
- enumerable: true,
44
- get: function () {
45
- return _useCarouselSlides.useCarouselSlides;
46
- }
47
- });
48
36
  Object.defineProperty(exports, "useCarouselSwipe", {
49
37
  enumerable: true,
50
38
  get: function () {
@@ -53,9 +41,7 @@ Object.defineProperty(exports, "useCarouselSwipe", {
53
41
  });
54
42
  var _useCarouselAutoplay = require("./use-carousel-autoplay.js");
55
43
  var _useCarouselIndex = require("./use-carousel-index.js");
56
- var _useCarouselIndicator = require("./use-carousel-indicator.js");
57
44
  var _useCarouselLifecycle = require("./use-carousel-lifecycle.js");
58
45
  var _useCarouselPanResponder = require("./use-carousel-pan-responder.js");
59
46
  var _useCarouselPosition = require("./use-carousel-position.js");
60
- var _useCarouselSlides = require("./use-carousel-slides.js");
61
47
  var _useCarouselSwipe = require("./use-carousel-swipe.js");
@@ -7,8 +7,10 @@ exports.useCarouselIndex = void 0;
7
7
  var _ahooks = require("ahooks");
8
8
  var _lodashEs = require("lodash-es");
9
9
  var _react = require("react");
10
- var _constants = require("../constants.js");
11
- var _utils = require("../utils.js");
10
+ /**
11
+ * 橡皮筋效果阻尼系数
12
+ */
13
+ const RUBBERBAND_DAMPING = 0.35;
12
14
  /**
13
15
  * 轮播图索引管理 Hook
14
16
  *
@@ -93,24 +95,25 @@ const useCarouselIndex = params => {
93
95
  if (loopEnabled) return nextPosition;
94
96
  if (slidePixels <= 0) return nextPosition;
95
97
  if (total <= 0) return 0;
96
- const {
97
- min,
98
- max
99
- } = (0, _utils.getBoundaryIndexRange)({
100
- total,
101
- slideSize: normalizedSlideSize,
102
- trackOffset: normalizedTrackOffset,
103
- stuckAtBoundary
104
- });
98
+
99
+ // 计算轮播边界索引范围
100
+ let min = 0;
101
+ let max = total - 1;
102
+ if (stuckAtBoundary) {
103
+ const slideRatio = normalizedSlideSize / 100;
104
+ const offsetRatio = normalizedTrackOffset / 100;
105
+ min = 0 + offsetRatio / (slideRatio || 1);
106
+ max = total - 1 - (1 - slideRatio - offsetRatio) / (slideRatio || 1);
107
+ }
105
108
  const minPos = min * slidePixels;
106
109
  const maxPos = max * slidePixels;
107
110
  if (nextPosition < minPos) {
108
111
  if (!rubberband) return minPos;
109
- return minPos - (minPos - nextPosition) * _constants.RUBBERBAND_DAMPING;
112
+ return minPos - (minPos - nextPosition) * RUBBERBAND_DAMPING;
110
113
  }
111
114
  if (nextPosition > maxPos) {
112
115
  if (!rubberband) return maxPos;
113
- return maxPos + (nextPosition - maxPos) * _constants.RUBBERBAND_DAMPING;
116
+ return maxPos + (nextPosition - maxPos) * RUBBERBAND_DAMPING;
114
117
  }
115
118
  return nextPosition;
116
119
  });
@@ -55,13 +55,17 @@ const useCarouselLifecycle = params => {
55
55
  if (slidePixels > 0) {
56
56
  setPositionImmediate(getBoundedPosition(extIndex * slidePixels));
57
57
  }
58
- }, [defaultIndex, getExtIndexFromIndex, getBoundedPosition, setPositionImmediate, slidePixels, total, updateCurrent, reportIndexRef, extIndexRef]);
58
+ // eslint-disable-next-line react-hooks/exhaustive-deps
59
+ }, [defaultIndex, getExtIndexFromIndex, getBoundedPosition, setPositionImmediate, slidePixels, total, updateCurrent
60
+ // refs 不需要在依赖数组中,它们的引用永远不变
61
+ ]);
59
62
 
60
63
  // 响应 slidePixels 变化
61
64
  (0, _react.useEffect)(() => {
62
65
  if (slidePixels <= 0) return;
63
66
  const extIndex = extIndexRef.current;
64
67
  setPositionImmediate(getBoundedPosition(extIndex * slidePixels));
65
- }, [getBoundedPosition, setPositionImmediate, slidePixels, extIndexRef]);
68
+ // eslint-disable-next-line react-hooks/exhaustive-deps
69
+ }, [getBoundedPosition, setPositionImmediate, slidePixels]);
66
70
  };
67
71
  exports.useCarouselLifecycle = useCarouselLifecycle;