@tarojs/components-advanced 4.1.12-beta.14 → 4.1.12-beta.16

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.
@@ -6,6 +6,10 @@ export interface ListScrollElementAttachRefs {
6
6
  onScroll: ((e: {
7
7
  scrollTop: number;
8
8
  scrollLeft: number;
9
+ detail: {
10
+ scrollTop: number;
11
+ scrollLeft: number;
12
+ };
9
13
  }) => void) | undefined;
10
14
  onScrollToUpper: (() => void) | undefined;
11
15
  onScrollToLower: (() => void) | undefined;
@@ -56,7 +56,9 @@ function useListScrollElementAttach(enabled, effectiveScrollElement, effectiveSt
56
56
  const clientSize = isHorizontal ? target.clientWidth : target.clientHeight;
57
57
  r.scrollCorrection.markUserScrolling();
58
58
  updateRenderOffset(effectiveAdjusted, false, 'scrollElement');
59
- (_a = r.onScroll) === null || _a === void 0 ? void 0 : _a.call(r, { scrollTop: isHorizontal ? 0 : scrollPos, scrollLeft: isHorizontal ? scrollPos : 0 });
59
+ const scrollTop = isHorizontal ? 0 : scrollPos;
60
+ const scrollLeft = isHorizontal ? scrollPos : 0;
61
+ (_a = r.onScroll) === null || _a === void 0 ? void 0 : _a.call(r, { scrollTop, scrollLeft, detail: { scrollTop, scrollLeft } });
60
62
  const { upper, lower } = r.threshold;
61
63
  const innerContentLen = r.listContentLength;
62
64
  const nowInUpper = effectiveAdjusted <= upper;
@@ -1 +1 @@
1
- {"version":3,"file":"useListScrollElementAttach.js","sources":["../../../../src/components/list/hooks/useListScrollElementAttach.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nimport type { RefObject } from 'react'\n\nexport interface ListScrollElementAttachRefs {\n scrollCorrection: { markUserScrolling: () => void }\n onScroll: ((e: { scrollTop: number, scrollLeft: number }) => void) | undefined\n onScrollToUpper: (() => void) | undefined\n onScrollToLower: (() => void) | undefined\n threshold: { upper: number, lower: number }\n listContentLength: number\n}\n\n/**\n * scrollElement 模式下:监听外部滚动驱动 renderOffset,并从 scrollElement 获取 containerLength\n */\nexport function useListScrollElementAttach(\n enabled: boolean,\n effectiveScrollElement: RefObject<HTMLElement | null> | null,\n effectiveStartOffset: number,\n isHorizontal: boolean,\n setContainerLength: (v: number) => void,\n updateRenderOffset: (offset: number, sync?: boolean, source?: string) => void,\n scrollRefProp: React.MutableRefObject<HTMLElement | null> | undefined,\n refsRef: RefObject<ListScrollElementAttachRefs>\n) {\n const effectiveStartOffsetRef = useRef(effectiveStartOffset)\n effectiveStartOffsetRef.current = effectiveStartOffset\n\n useEffect(() => {\n if (!enabled || !effectiveScrollElement) return\n const el = effectiveScrollElement.current\n if (!el || typeof ResizeObserver === 'undefined') return\n\n const update = () => {\n const measured = isHorizontal ? el.clientWidth : el.clientHeight\n if (measured > 0) setContainerLength(measured)\n if (scrollRefProp) scrollRefProp.current = el\n }\n update()\n const ro = new ResizeObserver(update)\n ro.observe(el)\n return () => ro.disconnect()\n }, [enabled, effectiveScrollElement, isHorizontal, scrollRefProp, setContainerLength])\n\n useEffect(() => {\n if (!enabled || !effectiveScrollElement) return\n\n let cancelled = false\n let teardown: (() => void) | null = null\n const maxRetries = 20\n\n const tryAttach = (retryCount = 0) => {\n if (cancelled) return\n const target = effectiveScrollElement.current\n if (!target) {\n if (retryCount < maxRetries) {\n requestAnimationFrame(() => tryAttach(retryCount + 1))\n }\n return\n }\n\n const refs = refsRef.current\n if (!refs) return\n\n let inUpperZone = true\n let inLowerZone = false\n\n const handler = () => {\n const r = refsRef.current\n if (!r) return\n const scrollPos = isHorizontal ? target.scrollLeft : target.scrollTop\n const adjustedPos = scrollPos - effectiveStartOffsetRef.current\n const effectiveAdjusted = Math.max(0, adjustedPos)\n const clientSize = isHorizontal ? target.clientWidth : target.clientHeight\n r.scrollCorrection.markUserScrolling()\n updateRenderOffset(effectiveAdjusted, false, 'scrollElement')\n r.onScroll?.({ scrollTop: isHorizontal ? 0 : scrollPos, scrollLeft: isHorizontal ? scrollPos : 0 })\n\n const { upper, lower } = r.threshold\n const innerContentLen = r.listContentLength\n const nowInUpper = effectiveAdjusted <= upper\n const nowInLower = innerContentLen > 0 && effectiveAdjusted + clientSize >= innerContentLen - lower\n if (nowInUpper && !inUpperZone) r.onScrollToUpper?.()\n if (nowInLower && !inLowerZone) r.onScrollToLower?.()\n inUpperZone = nowInUpper\n inLowerZone = nowInLower\n }\n\n const initialScroll = isHorizontal ? target.scrollLeft : target.scrollTop\n const initialAdjusted = Math.max(0, initialScroll - effectiveStartOffsetRef.current)\n updateRenderOffset(initialAdjusted, false, 'scrollElement')\n\n target.addEventListener('scroll', handler, { passive: true })\n teardown = () => target.removeEventListener('scroll', handler)\n }\n\n tryAttach()\n return () => {\n cancelled = true\n teardown?.()\n }\n }, [enabled, effectiveScrollElement, isHorizontal, effectiveStartOffset, updateRenderOffset, refsRef])\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useListScrollElementAttach.js","sources":["../../../../src/components/list/hooks/useListScrollElementAttach.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nimport type { RefObject } from 'react'\n\nexport interface ListScrollElementAttachRefs {\n scrollCorrection: { markUserScrolling: () => void }\n onScroll: ((e: { scrollTop: number, scrollLeft: number, detail: { scrollTop: number, scrollLeft: number } }) => void) | undefined\n onScrollToUpper: (() => void) | undefined\n onScrollToLower: (() => void) | undefined\n threshold: { upper: number, lower: number }\n listContentLength: number\n}\n\n/**\n * scrollElement 模式下:监听外部滚动驱动 renderOffset,并从 scrollElement 获取 containerLength\n */\nexport function useListScrollElementAttach(\n enabled: boolean,\n effectiveScrollElement: RefObject<HTMLElement | null> | null,\n effectiveStartOffset: number,\n isHorizontal: boolean,\n setContainerLength: (v: number) => void,\n updateRenderOffset: (offset: number, sync?: boolean, source?: string) => void,\n scrollRefProp: React.MutableRefObject<HTMLElement | null> | undefined,\n refsRef: RefObject<ListScrollElementAttachRefs>\n) {\n const effectiveStartOffsetRef = useRef(effectiveStartOffset)\n effectiveStartOffsetRef.current = effectiveStartOffset\n\n useEffect(() => {\n if (!enabled || !effectiveScrollElement) return\n const el = effectiveScrollElement.current\n if (!el || typeof ResizeObserver === 'undefined') return\n\n const update = () => {\n const measured = isHorizontal ? el.clientWidth : el.clientHeight\n if (measured > 0) setContainerLength(measured)\n if (scrollRefProp) scrollRefProp.current = el\n }\n update()\n const ro = new ResizeObserver(update)\n ro.observe(el)\n return () => ro.disconnect()\n }, [enabled, effectiveScrollElement, isHorizontal, scrollRefProp, setContainerLength])\n\n useEffect(() => {\n if (!enabled || !effectiveScrollElement) return\n\n let cancelled = false\n let teardown: (() => void) | null = null\n const maxRetries = 20\n\n const tryAttach = (retryCount = 0) => {\n if (cancelled) return\n const target = effectiveScrollElement.current\n if (!target) {\n if (retryCount < maxRetries) {\n requestAnimationFrame(() => tryAttach(retryCount + 1))\n }\n return\n }\n\n const refs = refsRef.current\n if (!refs) return\n\n let inUpperZone = true\n let inLowerZone = false\n\n const handler = () => {\n const r = refsRef.current\n if (!r) return\n const scrollPos = isHorizontal ? target.scrollLeft : target.scrollTop\n const adjustedPos = scrollPos - effectiveStartOffsetRef.current\n const effectiveAdjusted = Math.max(0, adjustedPos)\n const clientSize = isHorizontal ? target.clientWidth : target.clientHeight\n r.scrollCorrection.markUserScrolling()\n updateRenderOffset(effectiveAdjusted, false, 'scrollElement')\n const scrollTop = isHorizontal ? 0 : scrollPos\n const scrollLeft = isHorizontal ? scrollPos : 0\n r.onScroll?.({ scrollTop, scrollLeft, detail: { scrollTop, scrollLeft } })\n\n const { upper, lower } = r.threshold\n const innerContentLen = r.listContentLength\n const nowInUpper = effectiveAdjusted <= upper\n const nowInLower = innerContentLen > 0 && effectiveAdjusted + clientSize >= innerContentLen - lower\n if (nowInUpper && !inUpperZone) r.onScrollToUpper?.()\n if (nowInLower && !inLowerZone) r.onScrollToLower?.()\n inUpperZone = nowInUpper\n inLowerZone = nowInLower\n }\n\n const initialScroll = isHorizontal ? target.scrollLeft : target.scrollTop\n const initialAdjusted = Math.max(0, initialScroll - effectiveStartOffsetRef.current)\n updateRenderOffset(initialAdjusted, false, 'scrollElement')\n\n target.addEventListener('scroll', handler, { passive: true })\n teardown = () => target.removeEventListener('scroll', handler)\n }\n\n tryAttach()\n return () => {\n cancelled = true\n teardown?.()\n }\n }, [enabled, effectiveScrollElement, isHorizontal, effectiveStartOffset, updateRenderOffset, refsRef])\n}\n"],"names":[],"mappings":"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"}
@@ -100,10 +100,9 @@ fallbackContainerLength) {
100
100
  const effectiveAdjusted = Math.max(0, adjustedPos);
101
101
  r.scrollCorrection.markUserScrolling();
102
102
  updateRenderOffset(effectiveAdjusted, false, 'scrollElement');
103
- (_l = r.onScroll) === null || _l === void 0 ? void 0 : _l.call(r, {
104
- scrollTop: isHorizontal ? 0 : scrollPos,
105
- scrollLeft: isHorizontal ? scrollPos : 0,
106
- });
103
+ const scrollTop = isHorizontal ? 0 : scrollPos;
104
+ const scrollLeft = isHorizontal ? scrollPos : 0;
105
+ (_l = r.onScroll) === null || _l === void 0 ? void 0 : _l.call(r, { scrollTop, scrollLeft, detail: { scrollTop, scrollLeft } });
107
106
  // 兜底:measure 未完成时 containerLengthRef 为 0,用 fallback 参与触顶/触底判断,避免漏触发
108
107
  const clientSize = containerLengthRef.current || fallbackContainerLength || 0;
109
108
  if (clientSize > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"useListScrollElementAttachWeapp.js","sources":["../../../../src/components/list/hooks/useListScrollElementAttachWeapp.ts"],"sourcesContent":["import Taro from '@tarojs/taro'\nimport { useEffect, useRef } from 'react'\n\nimport type { MutableRefObject, RefObject } from 'react'\nimport type { ListScrollElementAttachRefs } from './useListScrollElementAttach'\n\n/**\n * 小程序版 scrollElement 模式:监听外部 scroll-view 的滚动事件驱动 renderOffset,\n * 并通过 createSelectorQuery 测量容器尺寸。\n *\n * 与 H5 版 useListScrollElementAttach 的区别:\n * - 容器尺寸通过 createSelectorQuery 测量(无 ResizeObserver)\n * - 滚动事件通过 TaroElement.addEventListener,格式为 TaroEvent(detail 合并到 target 上)\n * - 若 scroll-view 无 id,自动分配临时 id 供 SelectorQuery 使用\n */\nexport function useListScrollElementAttachWeapp(\n enabled: boolean,\n effectiveScrollElement: RefObject<HTMLElement | null> | null,\n effectiveStartOffsetRef: MutableRefObject<number>,\n effectiveStartOffset: number,\n isHorizontal: boolean,\n setContainerLength: (v: number) => void,\n updateRenderOffset: (offset: number, sync?: boolean, source?: string) => void,\n scrollRefProp: React.MutableRefObject<HTMLElement | null> | undefined,\n refsRef: RefObject<ListScrollElementAttachRefs>,\n /**\n * 【兜底】容器尺寸测量失败或未完成时的回退值。\n *\n * 使用场景:\n * 1. 首次 scroll:SelectorQuery.exec 异步,scroll 事件可能早于测量回调,containerLengthRef 仍为 0\n * 2. 测量长期失败:SelectorQuery 返回空或 rect 尺寸为 0(如 id 错误、节点未挂载)\n *\n * 兜底逻辑:\n * - measure 回调:rect 为空或 measured≤0 时,若有 fallback 则写入 containerLengthRef 与 setContainerLength\n * - scroll handler:containerLengthRef 为 0 时,用 fallback 参与 onScrollToUpper/Lower 判断\n *\n * 取值建议:与 List 的 initialContainerLength 一致(默认 400,或 height/width prop),避免与 renderRange 等逻辑冲突。\n * 注意:fallback 与真实视口差异大时,onScrollToUpper/Lower 可能误触发;measure 每 150ms 轮询,正常会很快覆盖。\n */\n fallbackContainerLength?: number\n) {\n const containerLengthRef = useRef(0)\n const autoIdRef = useRef(`_ls_${Math.random().toString(36).slice(2, 9)}`)\n\n useEffect(() => {\n if (!enabled || !effectiveScrollElement) return\n const el = effectiveScrollElement.current as any\n if (!el) return\n if (scrollRefProp) scrollRefProp.current = el\n\n if (!el.id) {\n el.id = autoIdRef.current\n }\n const scrollViewId = el.id\n\n const measure = () => {\n const instance = Taro.getCurrentInstance()\n const query = instance?.page\n ? Taro.createSelectorQuery().in(instance.page as any)\n : Taro.createSelectorQuery()\n query\n .select(`#${scrollViewId}`)\n .boundingClientRect()\n .exec((res) => {\n const rect = res?.[0]\n if (rect) {\n const measured = isHorizontal ? rect.width : rect.height\n if (measured > 0) {\n containerLengthRef.current = measured\n setContainerLength(measured)\n return\n }\n }\n // 兜底:rect 为空或 measured≤0 时,使用 fallback 避免 containerLengthRef 长期为 0\n if (fallbackContainerLength != null && fallbackContainerLength > 0) {\n containerLengthRef.current = fallbackContainerLength\n setContainerLength(fallbackContainerLength)\n }\n })\n }\n\n measure()\n const interval = setInterval(measure, 150)\n return () => clearInterval(interval)\n }, [enabled, effectiveScrollElement, isHorizontal, scrollRefProp, setContainerLength, fallbackContainerLength])\n\n useEffect(() => {\n if (!enabled || !effectiveScrollElement) return\n\n let cancelled = false\n let teardown: (() => void) | null = null\n const maxRetries = 20\n\n const tryAttach = (retryCount = 0) => {\n if (cancelled) return\n const target = effectiveScrollElement.current as any\n if (!target) {\n if (retryCount < maxRetries) {\n setTimeout(() => tryAttach(retryCount + 1), 50)\n }\n return\n }\n\n let inUpperZone = true\n let inLowerZone = false\n\n const handler = (e: any) => {\n const r = refsRef.current\n if (!r) return\n\n const scrollPos = isHorizontal\n ? (e?.target?.scrollLeft ?? e?.mpEvent?.detail?.scrollLeft ?? 0)\n : (e?.target?.scrollTop ?? e?.mpEvent?.detail?.scrollTop ?? 0)\n const startOffset = effectiveStartOffsetRef.current\n const adjustedPos = scrollPos - startOffset\n const effectiveAdjusted = Math.max(0, adjustedPos)\n\n r.scrollCorrection.markUserScrolling()\n updateRenderOffset(effectiveAdjusted, false, 'scrollElement')\n r.onScroll?.({\n scrollTop: isHorizontal ? 0 : scrollPos,\n scrollLeft: isHorizontal ? scrollPos : 0,\n })\n\n // 兜底:measure 未完成时 containerLengthRef 为 0,用 fallback 参与触顶/触底判断,避免漏触发\n const clientSize = containerLengthRef.current || fallbackContainerLength || 0\n if (clientSize > 0) {\n const { upper, lower } = r.threshold\n const innerContentLen = r.listContentLength\n const nowInUpper = effectiveAdjusted <= upper\n const nowInLower = innerContentLen > 0 && effectiveAdjusted + clientSize >= innerContentLen - lower\n if (nowInUpper && !inUpperZone) r.onScrollToUpper?.()\n if (nowInLower && !inLowerZone) r.onScrollToLower?.()\n inUpperZone = nowInUpper\n inLowerZone = nowInLower\n }\n }\n\n target.addEventListener('scroll', handler)\n teardown = () => target.removeEventListener('scroll', handler)\n\n // 初始 renderOffset:weapp 无法直接读 target.scrollTop,需通过 SelectorQuery 查询\n const scrollViewId = target.id || autoIdRef.current\n if (!target.id) target.id = scrollViewId\n const instance = Taro.getCurrentInstance()\n const query = instance?.page\n ? Taro.createSelectorQuery().in(instance.page as any)\n : Taro.createSelectorQuery()\n query.select(`#${scrollViewId}`).scrollOffset().exec((res) => {\n const info = res?.[0]\n if (info) {\n const scrollTopVal = info.scrollTop ?? 0\n const scrollLeftVal = info.scrollLeft ?? 0\n const scrollPos = isHorizontal ? scrollLeftVal : scrollTopVal\n const startOffset = effectiveStartOffsetRef.current\n const initialAdjusted = Math.max(0, scrollPos - startOffset)\n updateRenderOffset(initialAdjusted, false, 'scrollElement')\n }\n })\n }\n\n tryAttach()\n return () => {\n cancelled = true\n teardown?.()\n }\n }, [enabled, effectiveScrollElement, isHorizontal, effectiveStartOffsetRef, effectiveStartOffset, updateRenderOffset, refsRef, fallbackContainerLength])\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useListScrollElementAttachWeapp.js","sources":["../../../../src/components/list/hooks/useListScrollElementAttachWeapp.ts"],"sourcesContent":["import Taro from '@tarojs/taro'\nimport { useEffect, useRef } from 'react'\n\nimport type { MutableRefObject, RefObject } from 'react'\nimport type { ListScrollElementAttachRefs } from './useListScrollElementAttach'\n\n/**\n * 小程序版 scrollElement 模式:监听外部 scroll-view 的滚动事件驱动 renderOffset,\n * 并通过 createSelectorQuery 测量容器尺寸。\n *\n * 与 H5 版 useListScrollElementAttach 的区别:\n * - 容器尺寸通过 createSelectorQuery 测量(无 ResizeObserver)\n * - 滚动事件通过 TaroElement.addEventListener,格式为 TaroEvent(detail 合并到 target 上)\n * - 若 scroll-view 无 id,自动分配临时 id 供 SelectorQuery 使用\n */\nexport function useListScrollElementAttachWeapp(\n enabled: boolean,\n effectiveScrollElement: RefObject<HTMLElement | null> | null,\n effectiveStartOffsetRef: MutableRefObject<number>,\n effectiveStartOffset: number,\n isHorizontal: boolean,\n setContainerLength: (v: number) => void,\n updateRenderOffset: (offset: number, sync?: boolean, source?: string) => void,\n scrollRefProp: React.MutableRefObject<HTMLElement | null> | undefined,\n refsRef: RefObject<ListScrollElementAttachRefs>,\n /**\n * 【兜底】容器尺寸测量失败或未完成时的回退值。\n *\n * 使用场景:\n * 1. 首次 scroll:SelectorQuery.exec 异步,scroll 事件可能早于测量回调,containerLengthRef 仍为 0\n * 2. 测量长期失败:SelectorQuery 返回空或 rect 尺寸为 0(如 id 错误、节点未挂载)\n *\n * 兜底逻辑:\n * - measure 回调:rect 为空或 measured≤0 时,若有 fallback 则写入 containerLengthRef 与 setContainerLength\n * - scroll handler:containerLengthRef 为 0 时,用 fallback 参与 onScrollToUpper/Lower 判断\n *\n * 取值建议:与 List 的 initialContainerLength 一致(默认 400,或 height/width prop),避免与 renderRange 等逻辑冲突。\n * 注意:fallback 与真实视口差异大时,onScrollToUpper/Lower 可能误触发;measure 每 150ms 轮询,正常会很快覆盖。\n */\n fallbackContainerLength?: number\n) {\n const containerLengthRef = useRef(0)\n const autoIdRef = useRef(`_ls_${Math.random().toString(36).slice(2, 9)}`)\n\n useEffect(() => {\n if (!enabled || !effectiveScrollElement) return\n const el = effectiveScrollElement.current as any\n if (!el) return\n if (scrollRefProp) scrollRefProp.current = el\n\n if (!el.id) {\n el.id = autoIdRef.current\n }\n const scrollViewId = el.id\n\n const measure = () => {\n const instance = Taro.getCurrentInstance()\n const query = instance?.page\n ? Taro.createSelectorQuery().in(instance.page as any)\n : Taro.createSelectorQuery()\n query\n .select(`#${scrollViewId}`)\n .boundingClientRect()\n .exec((res) => {\n const rect = res?.[0]\n if (rect) {\n const measured = isHorizontal ? rect.width : rect.height\n if (measured > 0) {\n containerLengthRef.current = measured\n setContainerLength(measured)\n return\n }\n }\n // 兜底:rect 为空或 measured≤0 时,使用 fallback 避免 containerLengthRef 长期为 0\n if (fallbackContainerLength != null && fallbackContainerLength > 0) {\n containerLengthRef.current = fallbackContainerLength\n setContainerLength(fallbackContainerLength)\n }\n })\n }\n\n measure()\n const interval = setInterval(measure, 150)\n return () => clearInterval(interval)\n }, [enabled, effectiveScrollElement, isHorizontal, scrollRefProp, setContainerLength, fallbackContainerLength])\n\n useEffect(() => {\n if (!enabled || !effectiveScrollElement) return\n\n let cancelled = false\n let teardown: (() => void) | null = null\n const maxRetries = 20\n\n const tryAttach = (retryCount = 0) => {\n if (cancelled) return\n const target = effectiveScrollElement.current as any\n if (!target) {\n if (retryCount < maxRetries) {\n setTimeout(() => tryAttach(retryCount + 1), 50)\n }\n return\n }\n\n let inUpperZone = true\n let inLowerZone = false\n\n const handler = (e: any) => {\n const r = refsRef.current\n if (!r) return\n\n const scrollPos = isHorizontal\n ? (e?.target?.scrollLeft ?? e?.mpEvent?.detail?.scrollLeft ?? 0)\n : (e?.target?.scrollTop ?? e?.mpEvent?.detail?.scrollTop ?? 0)\n const startOffset = effectiveStartOffsetRef.current\n const adjustedPos = scrollPos - startOffset\n const effectiveAdjusted = Math.max(0, adjustedPos)\n\n r.scrollCorrection.markUserScrolling()\n updateRenderOffset(effectiveAdjusted, false, 'scrollElement')\n const scrollTop = isHorizontal ? 0 : scrollPos\n const scrollLeft = isHorizontal ? scrollPos : 0\n r.onScroll?.({ scrollTop, scrollLeft, detail: { scrollTop, scrollLeft } })\n\n // 兜底:measure 未完成时 containerLengthRef 为 0,用 fallback 参与触顶/触底判断,避免漏触发\n const clientSize = containerLengthRef.current || fallbackContainerLength || 0\n if (clientSize > 0) {\n const { upper, lower } = r.threshold\n const innerContentLen = r.listContentLength\n const nowInUpper = effectiveAdjusted <= upper\n const nowInLower = innerContentLen > 0 && effectiveAdjusted + clientSize >= innerContentLen - lower\n if (nowInUpper && !inUpperZone) r.onScrollToUpper?.()\n if (nowInLower && !inLowerZone) r.onScrollToLower?.()\n inUpperZone = nowInUpper\n inLowerZone = nowInLower\n }\n }\n\n target.addEventListener('scroll', handler)\n teardown = () => target.removeEventListener('scroll', handler)\n\n // 初始 renderOffset:weapp 无法直接读 target.scrollTop,需通过 SelectorQuery 查询\n const scrollViewId = target.id || autoIdRef.current\n if (!target.id) target.id = scrollViewId\n const instance = Taro.getCurrentInstance()\n const query = instance?.page\n ? Taro.createSelectorQuery().in(instance.page as any)\n : Taro.createSelectorQuery()\n query.select(`#${scrollViewId}`).scrollOffset().exec((res) => {\n const info = res?.[0]\n if (info) {\n const scrollTopVal = info.scrollTop ?? 0\n const scrollLeftVal = info.scrollLeft ?? 0\n const scrollPos = isHorizontal ? scrollLeftVal : scrollTopVal\n const startOffset = effectiveStartOffsetRef.current\n const initialAdjusted = Math.max(0, scrollPos - startOffset)\n updateRenderOffset(initialAdjusted, false, 'scrollElement')\n }\n })\n }\n\n tryAttach()\n return () => {\n cancelled = true\n teardown?.()\n }\n }, [enabled, effectiveScrollElement, isHorizontal, effectiveStartOffsetRef, effectiveStartOffset, updateRenderOffset, refsRef, fallbackContainerLength])\n}\n"],"names":[],"mappings":"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"}
@@ -12,6 +12,10 @@ export interface ListProps {
12
12
  onScroll?: (e: {
13
13
  scrollTop: number;
14
14
  scrollLeft: number;
15
+ detail: {
16
+ scrollTop: number;
17
+ scrollLeft: number;
18
+ };
15
19
  }) => void;
16
20
  onScrollToUpper?: () => void;
17
21
  onScrollToLower?: () => void;
@@ -581,10 +581,9 @@ const InnerList = (props, ref) => {
581
581
  if (programmaticCooldownRef.current) {
582
582
  lastScrollTopRef.current = effectiveOffset;
583
583
  setRenderOffset(effectiveOffset);
584
- onScroll === null || onScroll === void 0 ? void 0 : onScroll({
585
- scrollTop: isHorizontal ? 0 : newOffset,
586
- scrollLeft: isHorizontal ? newOffset : 0
587
- });
584
+ const scrollTop = isHorizontal ? 0 : newOffset;
585
+ const scrollLeft = isHorizontal ? newOffset : 0;
586
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll({ scrollTop, scrollLeft, detail: { scrollTop, scrollLeft } });
588
587
  if (nowInUpper && !inUpperZoneRef.current)
589
588
  (_a = onScrollToUpperRef.current) === null || _a === void 0 ? void 0 : _a.call(onScrollToUpperRef);
590
589
  if (nowInLower && !inLowerZoneRef.current)
@@ -595,10 +594,9 @@ const InnerList = (props, ref) => {
595
594
  }
596
595
  scrollCorrection.markUserScrolling();
597
596
  updateRenderOffset(effectiveOffset, false, 'onScroll');
598
- onScroll === null || onScroll === void 0 ? void 0 : onScroll({
599
- scrollTop: isHorizontal ? 0 : newOffset,
600
- scrollLeft: isHorizontal ? newOffset : 0
601
- });
597
+ const scrollTop = isHorizontal ? 0 : newOffset;
598
+ const scrollLeft = isHorizontal ? newOffset : 0;
599
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll({ scrollTop, scrollLeft, detail: { scrollTop, scrollLeft } });
602
600
  if (nowInUpper && !inUpperZoneRef.current)
603
601
  (_c = onScrollToUpperRef.current) === null || _c === void 0 ? void 0 : _c.call(onScrollToUpperRef);
604
602
  if (nowInLower && !inLowerZoneRef.current)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/list/index.tsx"],"sourcesContent":["import { ScrollView, View } from '@tarojs/components'\nimport Taro from '@tarojs/taro'\nimport React from 'react'\n\nimport { getScrollViewContextNode } from '../../utils'\nimport { ScrollElementContextOrFallback } from '../../utils/scrollElementContext'\nimport { useItemSizeCache } from './hooks/useItemSizeCache'\nimport { useListNestedScroll } from './hooks/useListNestedScroll'\nimport { type ListScrollElementAttachRefs, useListScrollElementAttach } from './hooks/useListScrollElementAttach'\nimport { useListScrollElementAttachWeapp } from './hooks/useListScrollElementAttachWeapp'\nimport { type ListRefresherConfig, DEFAULT_REFRESHER_HEIGHT, useRefresher } from './hooks/useRefresher'\nimport { useResizeObserver } from './hooks/useResizeObserver'\nimport { useScrollCorrection } from './hooks/useScrollCorrection'\nimport ListItem from './ListItem'\nimport NoMore, { type NoMoreProps } from './NoMore'\nimport StickyHeader from './StickyHeader'\nimport StickySection from './StickySection'\nimport { isH5, isWeapp, supportsNativeRefresher } from './utils'\n\n/** 与官方 List.d.ts / ScrollView / harmony 对齐,不增减已有语义;扩展项仅用于高级能力 */\nexport interface ListProps {\n // ===== 与 ScrollView / List.d.ts 一致 =====\n showScrollbar?: boolean\n scrollTop?: number\n scrollX?: boolean\n scrollY?: boolean\n onScroll?: (e: { scrollTop: number, scrollLeft: number }) => void\n onScrollToUpper?: () => void\n onScrollToLower?: () => void\n upperThreshold?: number\n lowerThreshold?: number\n /** 与 ScrollView cacheExtent 对齐(视口外渲染距离),可选 */\n cacheExtent?: number\n /** 与 ScrollView enableBackToTop 对齐 */\n enableBackToTop?: boolean\n /** 与 ScrollView onScrollStart 对齐 */\n onScrollStart?: () => void\n /** 与 ScrollView onScrollEnd 对齐 */\n onScrollEnd?: () => void\n scrollIntoView?: string\n /** 透传给最外层 ScrollView 的 className,便于自定义样式 */\n className?: string\n\n // ===== 与 harmony-cpp ListProps / ListBuilder 对齐 =====\n stickyHeader?: boolean\n space?: number\n cacheCount?: number\n itemData?: any[]\n itemSize?: number | ((index: number, data?: any[]) => number)\n height?: number | string\n width?: number | string\n style?: React.CSSProperties\n children?: React.ReactNode\n /** Header 沿滚动方向尺寸;未传时回退到 itemSize */\n headerSize?: number\n\n // ===== 动态尺寸(与 type=\"dynamic\" 语义对齐)=====\n useResizeObserver?: boolean\n onItemSizeChange?: (index: number, size: number) => void\n\n // ===== NoMore 底部提示 =====\n showNoMore?: boolean\n noMoreText?: string\n noMoreStyle?: React.CSSProperties\n renderNoMore?: () => React.ReactNode\n\n // ===== 扩展:可见索引回调 =====\n onScrollIndex?: (start: number, end: number) => void\n\n // ===== 与 dynamic/harmony 对齐:List 自身可配置下拉刷新,无需 Refresher 子组件 =====\n /** 是否开启下拉刷新;与 Refresher 子组件二选一或同时存在(Refresher 子覆盖同名字段) */\n refresherEnabled?: boolean\n refresherThreshold?: number\n refresherDefaultStyle?: 'black' | 'white' | 'none'\n refresherBackground?: string\n refresherTriggered?: boolean\n onRefresherPulling?: (e?: { detail?: { deltaY?: number } }) => void\n onRefresherRefresh?: () => void | Promise<void>\n onRefresherRestore?: () => void\n onRefresherAbort?: () => void\n onRefresherWillRefresh?: () => void\n onRefresherStatusChange?: (e?: { detail?: { status?: number, dy?: number } }) => void\n\n // ===== 扩展:嵌套滚动(H5,借鉴 react-virtualized scrollElement)=====\n /** 是否嵌套模式,与 plato 对齐;true=使用父级滚动,需配合 scrollElement 或 Context;不传或 false=default */\n nestedScroll?: boolean\n /** 自定义滚动容器 ref,nestedScroll 模式下从 props 或 Context 获取 */\n scrollElement?: React.RefObject<HTMLElement | null>\n /** 暴露滚动容器 ref,供内层 List/WaterFlow(nestedScroll)嵌套时传入 scrollElement */\n scrollRef?: React.MutableRefObject<HTMLElement | null>\n}\n\nexport interface ListHandle {\n scroll: (options?: {\n top?: number\n left?: number\n }) => void\n}\n\nexport function accumulate(arr: number[]) {\n const result = [0]\n for (let i = 0; i < arr.length; i++) {\n result[i + 1] = result[i] + arr[i]\n }\n return result\n}\n\nexport function isShaking(diffList: number[]): boolean {\n if (diffList.length < 3) return false\n const signs = diffList.map(diff => Math.sign(diff))\n let alternations = 0\n for (let i = 1; i < signs.length; i++) {\n if (signs[i] !== 0 && signs[i] !== signs[i - 1]) alternations++\n }\n return alternations >= 2\n}\n\n// 小程序端:判断 item 是否应该执行 SelectorQuery 测量(仅检查是否已测量过)\n// SelectorQuery 是只读查询,不会触发 setData,滚动期间执行是安全的\nfunction shouldMeasureWeappItem(index: number, measuredSet: Set<number>): boolean {\n return !measuredSet.has(index)\n}\n\n// 小程序端暂不外抛 onItemSizeChange,避免父层重渲染导致 List remount 引发回顶或空白\nfunction weappDeferItemSizeChange(_index: number, _size: number, _onItemSizeChange?: (index: number, size: number) => void) {}\n\n/** 向后兼容:ListScrollElementContext 已统一为 ScrollElementContext,无 Context 时兜底为 fallback */\nexport { ScrollElementContextOrFallback as ListScrollElementContext } from '../../utils/scrollElementContext'\n\n\n/** 从 scroll 选项解析目标偏移量 */\nfunction resolveScrollTargetOffset(\n options: { top?: number, left?: number } | undefined,\n isHorizontal: boolean\n): number {\n const opts = options ?? {}\n const top = typeof opts.top === 'number' ? opts.top : undefined\n const left = typeof opts.left === 'number' ? opts.left : undefined\n let result = 0\n if (isHorizontal) {\n if (typeof left === 'number') result = left\n else if (typeof top === 'number') result = top\n } else {\n if (typeof top === 'number') result = top\n else if (typeof left === 'number') result = left\n }\n return Number.isFinite(result) ? result : 0\n}\n\n// eslint-disable-next-line complexity -- List 多端/多模式逻辑集中,已抽离 useListNestedScroll、useListScrollElementAttach、resolveScrollTargetOffset 等\nconst InnerList = (props: ListProps, ref: React.Ref<ListHandle | null>) => {\n const {\n stickyHeader = false,\n space = 0,\n height = 400,\n width = '100%',\n showScrollbar = true,\n scrollTop: controlledScrollTop,\n scrollX = false,\n scrollY = true,\n onScroll,\n onScrollToUpper,\n onScrollToLower,\n onScrollStart,\n onScrollEnd,\n upperThreshold = 50,\n lowerThreshold = 50,\n cacheCount = 2,\n cacheExtent,\n enableBackToTop,\n className,\n style,\n children,\n nestedScroll,\n scrollElement,\n scrollRef: scrollRefProp,\n } = props\n\n const isHorizontal = scrollX === true\n const listType = nestedScroll === true ? 'nested' : 'default'\n const {\n effectiveScrollElement,\n effectiveStartOffset,\n effectiveStartOffsetRef,\n useScrollElementMode,\n needAutoFind,\n autoFindStatus,\n contentWrapperRef,\n contentId,\n } = useListNestedScroll(listType, scrollElement, undefined, isHorizontal)\n const DEFAULT_ITEM_WIDTH = 120\n const DEFAULT_ITEM_HEIGHT = 40\n const defaultItemSize = isHorizontal ? DEFAULT_ITEM_WIDTH : DEFAULT_ITEM_HEIGHT\n\n const normalizeSize = React.useCallback((value: unknown): number | null => {\n if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) return null\n return value\n }, [])\n\n const resolveItemSizeByIndex = React.useCallback((index: number, fallback: number) => {\n const { itemSize, itemData } = props\n const numberSize = normalizeSize(itemSize)\n if (numberSize != null) return numberSize\n if (typeof itemSize === 'function') {\n const functionSize = normalizeSize(itemSize(index, itemData))\n if (functionSize != null) return functionSize\n }\n return fallback\n }, [props.itemSize, props.itemData, normalizeSize])\n\n // 滚动状态管理\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n // 生成唯一 List ID(用于小程序 ResizeObserver)\n const listId = React.useMemo(() => `list-${Math.random().toString(36).slice(2, 11)}`, [])\n\n // 渲染偏移量 - 用于计算应该渲染哪些元素\n const [renderOffset, setRenderOffset] = React.useState(controlledScrollTop ?? 0)\n\n // 程序性滚动用的目标偏移;用户滑动期间不更新,避免与原生滚动冲突\n const [scrollViewOffset, setScrollViewOffset] = React.useState(controlledScrollTop ?? 0)\n\n // 用户正在滑动时不再向 ScrollView 传 scrollTop,让滚动完全由原生接管\n const [isUserScrolling, setIsUserScrolling] = React.useState(false)\n // isUserScrolling 的 ref 镜像,供异步上下文读取最新值\n const isUserScrollingRef = React.useRef(false)\n\n const initialContainerLength = typeof (isHorizontal ? width : height) === 'number' ? (isHorizontal ? (width as number) : (height as number)) : 400\n const [containerLength, setContainerLength] = React.useState<number>(initialContainerLength)\n\n // 用容器实际尺寸更新视口长度,避免 props 与 CSS 不一致导致底部空白\n React.useEffect(() => {\n const el = containerRef.current\n if (!el || typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { contentRect } = entry\n const measured = isHorizontal ? contentRect.width : contentRect.height\n if (measured > 0) setContainerLength(measured)\n }\n })\n ro.observe(el)\n return () => ro.disconnect()\n }, [isHorizontal])\n\n // 滚动追踪相关refs\n const isScrollingRef = React.useRef(false)\n const lastScrollTopRef = React.useRef(controlledScrollTop ?? 0)\n const scrollDiffListRef = React.useRef<number[]>([0, 0, 0])\n const scrollTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n // H5:仅程序性滚动时写回 DOM scrollTop,用户滑动结束后不写回避免卡顿\n const programmaticScrollRef = React.useRef(false)\n // 小程序端程序性滚动冷却期:handleScroll 只更新 renderOffset,避免 scrollIntoView 后被原生回调拉回\n const programmaticCooldownRef = React.useRef(false)\n const programmaticCooldownTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n const scrollViewOffsetRef = React.useRef(0)\n // 处理渲染偏移量更新。\n // syncToScrollView=true:程序性滚动,立即同步 scrollViewOffset。\n // syncToScrollView=false:用户滑动,仅更新 renderOffset。weapp 采用 recycle-view 策略:不把用户滑动位置同步到 scrollViewOffset,避免「传滞后值拉回」和「从有到无归顶」。\n const updateRenderOffset = React.useCallback((newOffset: number, syncToScrollView?: boolean, source?: string) => {\n lastScrollTopRef.current = newOffset\n isScrollingRef.current = true\n\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current)\n }\n\n setRenderOffset(newOffset) // 始终更新虚拟列表用到的偏移\n\n if (syncToScrollView) {\n isUserScrollingRef.current = false\n setIsUserScrolling(false)\n // 小程序:target===sv 时 ScrollView 认为无变化不滚动→白屏;imperative/scrollIntoView 时先传中间值再 RAF 传 target 强制触发\n // target=0 用 +0.01;target>0 用 -0.01(统一 +0.01 到底部会被 clamp 成同值无效)\n const same = isWeapp && Math.abs(scrollViewOffsetRef.current - newOffset) < 1\n const needForce = same && (source === 'imperative' || source === 'scrollIntoView')\n if (needForce) {\n const intermediate = newOffset > 0 ? newOffset - 0.01 : 0.01\n setScrollViewOffset(intermediate)\n requestAnimationFrame(() => {\n setScrollViewOffset(newOffset)\n })\n } else {\n setScrollViewOffset(newOffset)\n }\n programmaticScrollRef.current = true\n if (isWeapp) {\n programmaticCooldownRef.current = true\n if (programmaticCooldownTimerRef.current) {\n clearTimeout(programmaticCooldownTimerRef.current)\n }\n programmaticCooldownTimerRef.current = setTimeout(() => {\n programmaticCooldownRef.current = false\n }, 500)\n }\n } else {\n isUserScrollingRef.current = true\n setIsUserScrolling(true)\n }\n\n scrollTimeoutRef.current = setTimeout(() => {\n isScrollingRef.current = false\n if (!syncToScrollView) {\n isUserScrollingRef.current = false\n setIsUserScrolling(false)\n // weapp recycle-view 策略:用户滑动结束后不同步 scrollViewOffset,保持 pass 的值不变,避免 从有到无 归顶\n if (!isWeapp) {\n setScrollViewOffset(lastScrollTopRef.current)\n }\n }\n }, isWeapp ? 200 : 150)\n }, [])\n\n // 暴露给外部的实例方法:通过 ref.scroll({ top / left }) 进行程序性滚动\n React.useImperativeHandle(\n ref,\n () => ({\n scroll(options) {\n const targetOffset = resolveScrollTargetOffset(options, isHorizontal)\n const el = effectiveScrollElement?.current\n if (el && isH5) {\n const scrollTarget = targetOffset + effectiveStartOffset\n if (isHorizontal) {\n el.scrollTo({ left: scrollTarget })\n } else {\n el.scrollTo({ top: scrollTarget })\n }\n updateRenderOffset(targetOffset, false, 'scrollElement')\n } else if (el && isWeapp && useScrollElementMode) {\n // 小程序 scrollElement 模式:需通过 getScrollViewContextNode + node.scrollTo 真正滚动外部 scroll-view\n // updateRenderOffset 必须在 scrollTo 之后调用,否则 getScrollViewContextNode 异步期间会先更新 renderOffset 导致闪一下\n const startOff = effectiveStartOffsetRef.current\n const scrollTarget = targetOffset + startOff\n const scrollViewId = (el as any).id || `_ls_${listId}`\n if (!(el as any).id) (el as any).id = scrollViewId\n getScrollViewContextNode(`#${scrollViewId}`).then((node: any) => {\n if (isHorizontal) {\n node?.scrollTo?.({ left: scrollTarget, animated: false })\n } else {\n node?.scrollTo?.({ top: scrollTarget, animated: false })\n }\n updateRenderOffset(targetOffset, true, 'imperative')\n })\n } else {\n updateRenderOffset(targetOffset, true, 'imperative')\n }\n },\n }),\n [scrollX, effectiveScrollElement, effectiveStartOffset, effectiveStartOffsetRef, isH5, isWeapp, isHorizontal, listId, useScrollElementMode, updateRenderOffset]\n )\n\n // 提取 Refresher 配置(List 属性为 base,Refresher 子组件覆盖)\n const refresherConfig = React.useMemo((): ListRefresherConfig | null => {\n const listRefresherEnabled = props.refresherEnabled !== false && (\n props.refresherEnabled === true || props.onRefresherRefresh != null\n )\n const baseFromList: ListRefresherConfig | null = listRefresherEnabled\n ? {\n refresherEnabled: props.refresherEnabled,\n refresherThreshold: props.refresherThreshold,\n refresherDefaultStyle: props.refresherDefaultStyle,\n refresherBackground: props.refresherBackground,\n refresherTriggered: props.refresherTriggered,\n onRefresherPulling: props.onRefresherPulling,\n onRefresherRefresh: props.onRefresherRefresh,\n onRefresherRestore: props.onRefresherRestore,\n onRefresherAbort: props.onRefresherAbort,\n onRefresherWillRefresh: props.onRefresherWillRefresh,\n onRefresherStatusChange: props.onRefresherStatusChange,\n }\n : null\n\n const isRefresherComponent = (child: React.ReactElement): boolean => {\n const type = child.type as any\n return type?.displayName === 'Refresher' || type?.name === 'Refresher'\n }\n\n let refresherChildProps: ListRefresherConfig | null = null\n let refresherCount = 0\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && isRefresherComponent(child)) {\n refresherCount++\n if (refresherCount > 1) {\n return\n }\n refresherChildProps = child.props as ListRefresherConfig\n }\n })\n\n if (refresherChildProps != null) {\n const base = baseFromList ?? {}\n // Refresher 子组件的配置覆盖 List 的配置\n return {\n ...base,\n ...refresherChildProps,\n } as ListRefresherConfig\n }\n return baseFromList\n }, [\n children,\n props.refresherEnabled,\n props.refresherThreshold,\n props.refresherDefaultStyle,\n props.refresherBackground,\n props.refresherTriggered,\n props.onRefresherPulling,\n props.onRefresherRefresh,\n props.onRefresherRestore,\n props.onRefresherAbort,\n props.onRefresherWillRefresh,\n props.onRefresherStatusChange,\n ])\n\n // 提取 NoMore 配置\n const noMoreConfig = React.useMemo(() => {\n let config: NoMoreProps | null = null\n let noMoreCount = 0\n\n // 从子组件中提取 NoMore\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && child.type === NoMore) {\n noMoreCount++\n if (noMoreCount > 1) {\n return\n }\n const childProps = child.props as NoMoreProps\n config = { ...childProps, visible: childProps.visible !== false }\n }\n })\n\n // Props 方式转换为配置(优先级低于子组件)\n if (props.showNoMore && !config) {\n config = {\n visible: true,\n text: props.noMoreText,\n style: props.noMoreStyle,\n children: props.renderNoMore?.()\n }\n }\n\n return config\n }, [children, props.showNoMore, props.noMoreText, props.noMoreStyle, props.renderNoMore])\n\n // Refresher 平台适配:H5 用 addImperativeTouchListeners\n const {\n scrollViewRefresherProps,\n scrollViewRefresherHandlers,\n h5RefresherProps,\n addImperativeTouchListeners,\n renderRefresherContent,\n } = useRefresher(\n refresherConfig,\n isH5 && refresherConfig && !supportsNativeRefresher ? 0 : renderOffset,\n useScrollElementMode\n ? (ev: TouchEvent) => (ev.target != null && contentWrapperRef.current?.contains(ev.target as Node)) ?? false\n : undefined\n )\n const refresherTeardownRef = React.useRef<(() => void) | null>(null)\n const addImperativeTouchListenersRef = React.useRef(addImperativeTouchListeners)\n addImperativeTouchListenersRef.current = addImperativeTouchListeners\n React.useEffect(() => () => {\n if (refresherTeardownRef.current) refresherTeardownRef.current()\n }, [])\n\n // H5 下拉刷新顶栏高度(默认 50px,来自 useRefresher)\n const refresherHeightForH5 = (isH5 && refresherConfig && !supportsNativeRefresher && refresherConfig.refresherEnabled !== false) ? DEFAULT_REFRESHER_HEIGHT : 0\n\n // 解析分组结构:StickySection、ListItem 为直接子组件,过滤 Refresher/NoMore\n const sections = React.useMemo(() => {\n const result: Array<{\n header: React.ReactElement | null\n items: React.ReactElement[]\n key: string\n }> = []\n const defaultItems: React.ReactElement[] = []\n React.Children.forEach(children, (child, idx) => {\n if (React.isValidElement(child) && child.type === StickySection) {\n const sectionProps = child.props as any\n let header: React.ReactElement | null = null\n const items: React.ReactElement[] = []\n React.Children.forEach(sectionProps.children, (subChild) => {\n if (React.isValidElement(subChild) && subChild.type === StickyHeader) header = subChild\n else if (React.isValidElement(subChild) && subChild.type === ListItem) items.push(subChild)\n })\n result.push({ header, items, key: child.key || String(idx) })\n } else if (React.isValidElement(child) && child.type === ListItem) {\n defaultItems.push(child)\n }\n })\n if (defaultItems.length > 0) {\n result.push({ header: null, items: defaultItems, key: 'default' })\n }\n return result\n }, [children])\n\n // 动态尺寸管理\n const estimatedSize = resolveItemSizeByIndex(0, defaultItemSize)\n\n // 计算总 item 数量(跨所有 section)\n const totalItemCount = React.useMemo(() => {\n return sections.reduce((sum, section) => sum + section.items.length, 0)\n }, [sections])\n\n // 存储元素引用(用于 ResizeObserver)\n const itemRefsRef = React.useRef<Map<number, HTMLElement | null>>(new Map())\n // 存储 header 元素引用(用于 ResizeObserver)\n const headerRefsRef = React.useRef<Map<number, HTMLElement | null>>(new Map())\n // 小程序端:已完成 SelectorQuery 测量的 item 索引集,避免 refCallback 重复触发测量导致无限循环\n const weappMeasuredItemsRef = React.useRef<Set<number>>(new Set())\n // 动态尺寸缓存更新版本:setItemSize 后递增,用于驱动 sectionOffsets/totalLength 与 item 定位重算\n const [sizeCacheVersion, setSizeCacheVersion] = React.useState(0)\n const sizeCacheRafRef = React.useRef<number | null>(null)\n // 小程序端:测量触发 re-render 时,reflow 帧传 eff 并同步 scrollViewOffset,避免下一帧传 0 导致跳变\n const measureScrollProtectRef = React.useRef(false)\n // 动态尺寸缓存\n const sizeCache = useItemSizeCache({\n isHorizontal,\n estimatedSize,\n itemCount: totalItemCount\n })\n\n // header 动态尺寸缓存(sectionIndex -> size)\n const headerSizeCacheRef = React.useRef<Map<number, number>>(new Map())\n\n // 滚动修正的可见起始索引\n const visibleStartIndexRef = React.useRef(0)\n\n // ScrollTop 修正(仅 H5):动高时尺寸变化自动修正 scrollTop\n const scrollCorrectionEnabled = !isWeapp && props.useResizeObserver === true\n const scrollCorrection = useScrollCorrection({\n enabled: scrollCorrectionEnabled,\n visibleStartIndexRef,\n setScrollOffset: (offsetOrUpdater) => {\n const newOffset = typeof offsetOrUpdater === 'function'\n ? offsetOrUpdater(renderOffset)\n : offsetOrUpdater\n updateRenderOffset(newOffset, true, 'scrollCorrection') // 程序性修正需同步到 ScrollView\n }\n })\n const scrollCorrectionRef = React.useRef(scrollCorrection)\n scrollCorrectionRef.current = scrollCorrection\n const onScrollRef = React.useRef(onScroll)\n onScrollRef.current = onScroll\n const onScrollToUpperRef = React.useRef(onScrollToUpper)\n onScrollToUpperRef.current = onScrollToUpper\n const onScrollToLowerRef = React.useRef(onScrollToLower)\n onScrollToLowerRef.current = onScrollToLower\n const thresholdRef = React.useRef({ upper: upperThreshold, lower: lowerThreshold })\n thresholdRef.current = { upper: upperThreshold, lower: lowerThreshold }\n const listContentLengthRef = React.useRef(0)\n const inUpperZoneRef = React.useRef(true)\n const inLowerZoneRef = React.useRef(false)\n\n // 小程序 + 动高(virtual-list 风格):测量变化后同帧重排,不做程序性 scrollTop 回拉\n const scheduleWeappDynamicReflow = React.useCallback(() => {\n if (!isWeapp || props.useResizeObserver !== true) return\n if (sizeCacheRafRef.current != null) return\n sizeCacheRafRef.current = requestAnimationFrame(() => {\n sizeCacheRafRef.current = null\n measureScrollProtectRef.current = true\n setSizeCacheVersion((v) => v + 1)\n })\n }, [isWeapp, props.useResizeObserver])\n\n // ResizeObserver(当启用动态测量时)\n const resizeObserver = useResizeObserver({\n enabled: props.useResizeObserver === true,\n isHorizontal,\n listId,\n onResize: (index, size) => {\n const oldSize = sizeCache.getItemSize(index)\n sizeCache.setItemSize(index, size)\n\n if (Math.abs(oldSize - size) >= 1) {\n if (isWeapp && props.useResizeObserver === true) {\n scheduleWeappDynamicReflow()\n } else if (sizeCacheRafRef.current == null) {\n sizeCacheRafRef.current = requestAnimationFrame(() => {\n sizeCacheRafRef.current = null\n setSizeCacheVersion((v) => v + 1)\n })\n }\n }\n\n // 触发 ScrollTop 修正\n scrollCorrection.recordSizeChange(index, oldSize, size)\n\n // 小程序:延迟 onItemSizeChange,避免父组件重渲染导致 List remount\n // H5:直接回调\n if (isWeapp) {\n weappDeferItemSizeChange(index, size, props.onItemSizeChange)\n } else {\n props.onItemSizeChange?.(index, size)\n }\n }\n })\n\n // 嵌套滚动:内层高度变化上报\n const handleReportNestedHeightChange = React.useCallback((height: number, index: number) => {\n if (height <= 0) return\n const estimatedHeader = estimatedSize * 0.5\n const fullHeight = height + estimatedHeader\n const oldSize = sizeCache.getItemSize(index)\n if (Math.abs(oldSize - fullHeight) < 1) return\n sizeCache.setItemSize(index, fullHeight)\n scrollCorrection.recordSizeChange(index, oldSize, fullHeight)\n if (isWeapp && props.useResizeObserver === true) {\n scheduleWeappDynamicReflow()\n } else if (sizeCacheRafRef.current == null) {\n sizeCacheRafRef.current = requestAnimationFrame(() => {\n sizeCacheRafRef.current = null\n setSizeCacheVersion((v) => v + 1)\n })\n }\n }, [sizeCache, scrollCorrection, estimatedSize, isWeapp, props.useResizeObserver, scheduleWeappDynamicReflow])\n\n const getDefaultHeaderSize = React.useCallback(() => {\n const headerSize = normalizeSize(props.headerSize)\n if (headerSize != null) return headerSize\n return resolveItemSizeByIndex(0, defaultItemSize)\n }, [props.headerSize, resolveItemSizeByIndex, defaultItemSize, normalizeSize])\n\n // 获取 header 尺寸(支持动态测量)\n const getHeaderSize = React.useCallback((sectionIndex: number) => {\n if (props.useResizeObserver === true) {\n const cached = headerSizeCacheRef.current.get(sectionIndex)\n if (cached != null && cached > 0) return cached\n }\n return getDefaultHeaderSize()\n }, [props.useResizeObserver, getDefaultHeaderSize])\n\n const getItemSize = React.useCallback((index: number) => {\n if (props.useResizeObserver === true) {\n return sizeCache.getItemSize(index)\n }\n return resolveItemSizeByIndex(index, defaultItemSize)\n }, [props.useResizeObserver, sizeCache, resolveItemSizeByIndex, defaultItemSize])\n\n // 分组累积高度/宽度,sizeCacheVersion 变化时重算\n const sectionOffsets = React.useMemo(() => {\n const offsets: number[] = [0]\n let globalItemIndex = 0\n\n sections.forEach((section, sectionIdx) => {\n const headerSize = getHeaderSize(sectionIdx)\n const itemSizes = section.items.map((_, localIdx) => getItemSize(globalItemIndex + localIdx))\n const groupSize = (section.header ? headerSize : 0) +\n itemSizes.reduce((a, b) => a + b, 0) +\n Math.max(0, section.items.length) * space\n offsets.push(offsets[offsets.length - 1] + groupSize)\n globalItemIndex += section.items.length\n })\n return offsets\n }, [sections, space, getItemSize, getHeaderSize, sizeCacheVersion])\n\n // 外层虚拟滚动:可见分组\n const [startSection, endSection] = React.useMemo(() => {\n let start = 0; let end = sections.length - 1\n for (let i = 0; i < sections.length; i++) {\n if (sectionOffsets[i + 1] > renderOffset) {\n start = Math.max(0, i - cacheCount)\n break\n }\n }\n for (let i = start; i < sections.length; i++) {\n if (sectionOffsets[i] >= renderOffset + containerLength) {\n end = Math.min(sections.length - 1, i + cacheCount)\n break\n }\n }\n return [start, end]\n }, [renderOffset, containerLength, sectionOffsets, sections.length, cacheCount])\n\n // 视口内可见 item 的全局索引范围(供 onScrollIndex)\n const [visibleStartItem, visibleEndItem] = React.useMemo(() => {\n const viewportTop = renderOffset\n const viewportBottom = renderOffset + containerLength\n let firstVisible = -1\n let lastVisible = -1\n let globalIndex = 0\n\n for (let s = 0; s < sections.length; s++) {\n const section = sections[s]\n const headerSize = getHeaderSize(s)\n const sectionStart = sectionOffsets[s] + (section.header ? headerSize : 0)\n let itemTop = sectionStart\n\n for (let i = 0; i < section.items.length; i++) {\n const itemSize = getItemSize(globalIndex)\n const itemBottom = itemTop + itemSize\n // 判断 item 本身(不含 space)是否与视口相交\n if (itemBottom > viewportTop && itemTop < viewportBottom) {\n if (firstVisible < 0) firstVisible = globalIndex\n lastVisible = globalIndex\n }\n // 下一个 item 的起始位置 = 当前 item 结束 + space\n itemTop = itemBottom + space\n globalIndex++\n }\n }\n\n if (firstVisible < 0 || lastVisible < 0) return [0, 0]\n return [firstVisible, lastVisible]\n }, [renderOffset, containerLength, sections, sectionOffsets, getHeaderSize, getItemSize, space])\n\n const lastVisibleRangeRef = React.useRef({ start: -1, end: -1 })\n React.useEffect(() => {\n if (props.onScrollIndex) {\n if (lastVisibleRangeRef.current.start !== visibleStartItem ||\n lastVisibleRangeRef.current.end !== visibleEndItem) {\n lastVisibleRangeRef.current = { start: visibleStartItem, end: visibleEndItem }\n props.onScrollIndex(visibleStartItem, visibleEndItem)\n }\n }\n }, [visibleStartItem, visibleEndItem, props.onScrollIndex])\n\n const handleScroll = React.useCallback((e: any) => {\n let newOffset: number\n if (e.detail) {\n newOffset = isHorizontal ? e.detail.scrollLeft : e.detail.scrollTop\n } else {\n newOffset = isHorizontal ? e.scrollLeft : e.scrollTop\n }\n\n const effectiveOffset = newOffset\n const currentThreshold = thresholdRef.current\n const { upper, lower } = currentThreshold\n const currentContainerLength = containerRef.current\n ? (isHorizontal ? containerRef.current.clientWidth : containerRef.current.clientHeight)\n : containerLength\n const nowInUpper = effectiveOffset <= upper\n const currentContentLength = listContentLengthRef.current\n const nowInLower = currentContentLength > 0 && effectiveOffset + currentContainerLength >= currentContentLength - lower\n const diff = effectiveOffset - lastScrollTopRef.current\n scrollDiffListRef.current.shift()\n scrollDiffListRef.current.push(diff)\n const shaking = isScrollingRef.current && isShaking(scrollDiffListRef.current)\n if (shaking) return\n\n if (programmaticCooldownRef.current) {\n lastScrollTopRef.current = effectiveOffset\n setRenderOffset(effectiveOffset)\n onScroll?.({\n scrollTop: isHorizontal ? 0 : newOffset,\n scrollLeft: isHorizontal ? newOffset : 0\n })\n if (nowInUpper && !inUpperZoneRef.current) onScrollToUpperRef.current?.()\n if (nowInLower && !inLowerZoneRef.current) onScrollToLowerRef.current?.()\n inUpperZoneRef.current = nowInUpper\n inLowerZoneRef.current = nowInLower\n return\n }\n\n scrollCorrection.markUserScrolling()\n updateRenderOffset(effectiveOffset, false, 'onScroll')\n\n onScroll?.({\n scrollTop: isHorizontal ? 0 : newOffset,\n scrollLeft: isHorizontal ? newOffset : 0\n })\n if (nowInUpper && !inUpperZoneRef.current) onScrollToUpperRef.current?.()\n if (nowInLower && !inLowerZoneRef.current) onScrollToLowerRef.current?.()\n inUpperZoneRef.current = nowInUpper\n inLowerZoneRef.current = nowInLower\n }, [isHorizontal, onScroll, updateRenderOffset, scrollCorrection, props.useResizeObserver, containerLength])\n\n // 小程序:onScrollEnd 优先结束 isUserScrolling,timeout 兜底\n const handleNativeScrollEnd = React.useCallback(() => {\n if (isWeapp) {\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current)\n scrollTimeoutRef.current = null\n }\n if (isUserScrollingRef.current) {\n isScrollingRef.current = false\n isUserScrollingRef.current = false\n setIsUserScrolling(false)\n }\n }\n onScrollEnd?.()\n }, [isWeapp, onScrollEnd])\n\n // 暴露 scrollRef 给父组件,供内层 List/WaterFlow 传入 scrollElement\n React.useLayoutEffect(() => {\n if (!scrollRefProp) return\n const el = useScrollElementMode ? effectiveScrollElement?.current : containerRef.current\n if (el) {\n scrollRefProp.current = el\n }\n }, [scrollRefProp, useScrollElementMode, effectiveScrollElement])\n\n // controlledScrollTop 变化时同步到 ScrollView\n React.useEffect(() => {\n if (typeof controlledScrollTop === 'number') {\n const sv = scrollViewOffsetRef.current\n const same = isWeapp && Math.abs(sv - controlledScrollTop) < 1\n if (same) {\n const intermediate = controlledScrollTop > 0 ? controlledScrollTop - 0.01 : 0.01\n setRenderOffset(intermediate)\n setScrollViewOffset(intermediate)\n requestAnimationFrame(() => {\n setRenderOffset(controlledScrollTop)\n setScrollViewOffset(controlledScrollTop)\n })\n } else {\n setRenderOffset(controlledScrollTop)\n setScrollViewOffset(controlledScrollTop)\n }\n lastScrollTopRef.current = controlledScrollTop\n programmaticScrollRef.current = true\n }\n }, [controlledScrollTop])\n\n // 清理定时器、ResizeObserver 与尺寸缓存 RAF(仅在卸载时执行)\n React.useEffect(() => {\n return () => {\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current)\n }\n // 小程序端冷却期定时器清理\n if (isWeapp && programmaticCooldownTimerRef.current) {\n clearTimeout(programmaticCooldownTimerRef.current)\n }\n if (sizeCacheRafRef.current != null) {\n cancelAnimationFrame(sizeCacheRafRef.current)\n sizeCacheRafRef.current = null\n }\n resizeObserver.disconnect()\n scrollCorrection.clearQueue()\n }\n }, [])\n\n // scrollIntoView:仅当 scrollIntoView 变化时执行一次跳动,统一转换为 scrollTop 路径(updateRenderOffset)。\n const lastScrollIntoViewRef = React.useRef<string | null>(null)\n React.useEffect(() => {\n const targetId = props.scrollIntoView\n if (!targetId) {\n lastScrollIntoViewRef.current = null\n return\n }\n if (lastScrollIntoViewRef.current === targetId) return\n lastScrollIntoViewRef.current = targetId\n\n let targetIndex = -1\n if (targetId.startsWith('list-item-')) {\n targetIndex = parseInt(targetId.replace('list-item-', ''), 10)\n }\n\n if (targetIndex >= 0 && targetIndex < totalItemCount) {\n let targetOffset = 0\n let currentGlobalIndex = 0\n for (let s = 0; s < sections.length; s++) {\n const section = sections[s]\n const headerSize = section.header ? getHeaderSize(s) : 0\n if (currentGlobalIndex + section.items.length > targetIndex) {\n targetOffset += headerSize\n for (let i = 0; i < targetIndex - currentGlobalIndex; i++) {\n targetOffset += getItemSize(currentGlobalIndex + i) + space\n }\n break\n } else {\n targetOffset += headerSize\n for (let i = 0; i < section.items.length; i++) {\n targetOffset += getItemSize(currentGlobalIndex + i) + space\n }\n currentGlobalIndex += section.items.length\n }\n }\n const el = effectiveScrollElement?.current\n if (useScrollElementMode && el) {\n const scrollTarget = targetOffset + (isWeapp ? effectiveStartOffsetRef.current : effectiveStartOffset)\n if (isH5) {\n if (isHorizontal) {\n el.scrollTo({ left: scrollTarget })\n } else {\n el.scrollTo({ top: scrollTarget })\n }\n updateRenderOffset(targetOffset, true, 'scrollIntoView')\n } else if (isWeapp) {\n const scrollViewId = (el as any).id || `_ls_${listId}`\n if (!(el as any).id) (el as any).id = scrollViewId\n getScrollViewContextNode(`#${scrollViewId}`).then((node: any) => {\n if (isHorizontal) {\n node?.scrollTo?.({ left: scrollTarget, animated: false })\n } else {\n node?.scrollTo?.({ top: scrollTarget, animated: false })\n }\n updateRenderOffset(targetOffset, true, 'scrollIntoView')\n })\n } else {\n updateRenderOffset(targetOffset, true, 'scrollIntoView')\n }\n } else {\n updateRenderOffset(targetOffset, true, 'scrollIntoView')\n }\n }\n }, [props.scrollIntoView, totalItemCount, sections, getHeaderSize, getItemSize, space, updateRenderOffset, useScrollElementMode, effectiveScrollElement, effectiveStartOffset, effectiveStartOffsetRef, isH5, isWeapp, isHorizontal, listId])\n\n // 容器样式;H5 刷新中禁止滚动\n const containerStyle: React.CSSProperties = {\n position: 'relative',\n boxSizing: 'border-box',\n height,\n width,\n ...style,\n ...(isH5 && refresherConfig && !supportsNativeRefresher && h5RefresherProps.isRefreshing\n ? { overflow: 'hidden' as const }\n : {}),\n }\n\n // ScrollView 属性\n const scrollViewProps: Record<string, unknown> = {\n scrollY: !scrollX && scrollY,\n scrollX,\n style: containerStyle,\n className,\n enhanced: true,\n showScrollbar,\n upperThreshold,\n lowerThreshold,\n scrollWithAnimation: false,\n onScroll: handleScroll,\n onScrollStart,\n onScrollEnd: handleNativeScrollEnd,\n enableBackToTop,\n // 小程序端:开启滚动锚定,防止虚拟列表子节点通过 setData 更新时原生 scroll-view 重置滚动位置\n ...(isWeapp ? { scrollAnchoring: true } : {}),\n ...(typeof cacheExtent === 'number' ? { cacheExtent } : {}),\n\n ...scrollViewRefresherProps,\n ...scrollViewRefresherHandlers,\n }\n\n // H5 对齐小程序:refresherTriggered=true 时顶部立即显示加载指示器,滚到顶部并锁定滚动直至设为 false\n React.useEffect(() => {\n if (!isH5 || !refresherConfig || supportsNativeRefresher || !h5RefresherProps.isRefreshing) return\n updateRenderOffset(0, true, 'refresher')\n }, [h5RefresherProps.isRefreshing, isH5, refresherConfig, supportsNativeRefresher, updateRenderOffset])\n\n // H5 下拉刷新:ref 存 addImperativeTouchListeners,避免 config 变化导致 effect 循环\n React.useLayoutEffect(() => {\n const attach = addImperativeTouchListenersRef.current\n if (!attach) return\n let teardown: (() => void) | null = null\n const tryAttach = () => {\n const el = useScrollElementMode ? effectiveScrollElement?.current : containerRef.current\n if (el && !refresherTeardownRef.current) {\n teardown = attach(el)\n refresherTeardownRef.current = teardown\n }\n }\n tryAttach()\n const rafId = requestAnimationFrame(tryAttach)\n return () => {\n cancelAnimationFrame(rafId)\n if (teardown) {\n teardown()\n }\n refresherTeardownRef.current = null\n }\n }, [useScrollElementMode, effectiveScrollElement])\n\n scrollViewOffsetRef.current = scrollViewOffset\n // scrollTop:weapp 传 scrollViewOffset(reflow 帧传 eff 防跳变);H5 仅非用户滑动时传\n if (isWeapp) {\n if (measureScrollProtectRef.current) {\n measureScrollProtectRef.current = false\n const eff = lastScrollTopRef.current\n setScrollViewOffset(eff)\n if (isHorizontal) {\n scrollViewProps.scrollLeft = eff\n } else {\n scrollViewProps.scrollTop = eff\n }\n programmaticScrollRef.current = false\n } else {\n const sv = scrollViewOffset\n if (isHorizontal) {\n scrollViewProps.scrollLeft = sv\n } else {\n scrollViewProps.scrollTop = sv\n }\n programmaticScrollRef.current = false\n }\n } else {\n // H5:非用户滑动时传\n if (!isUserScrolling) {\n if (isHorizontal) {\n scrollViewProps.scrollLeft = scrollViewOffset\n } else {\n scrollViewProps.scrollTop = scrollViewOffset\n }\n }\n }\n\n // H5:程序性滚动时写回 DOM scrollTop\n React.useEffect(() => {\n if (!isH5) return\n if (isUserScrolling || !containerRef.current || typeof scrollViewOffset !== 'number') return\n if (!programmaticScrollRef.current) return\n const scrollValue = scrollViewOffset\n if (isHorizontal) {\n containerRef.current.scrollLeft = scrollValue\n } else {\n containerRef.current.scrollTop = scrollValue\n }\n programmaticScrollRef.current = false\n }, [isH5, scrollViewOffset, isHorizontal, isUserScrolling])\n\n // 总高度/宽度(含 NoMore)\n const noMoreHeight = noMoreConfig?.visible ? (noMoreConfig.height || 60) : 0\n const listContentLength = sectionOffsets[sectionOffsets.length - 1] + noMoreHeight\n const totalLength = listContentLength\n\n // scrollElement 模式下 onScrollToLower 需用内层内容高度判断,供 scroll handler 读取\n listContentLengthRef.current = listContentLength\n\n const scrollAttachRefsRef = React.useRef<ListScrollElementAttachRefs | null>(null)\n scrollAttachRefsRef.current = {\n scrollCorrection: scrollCorrectionRef.current,\n onScroll: onScrollRef.current,\n onScrollToUpper: onScrollToUpperRef.current,\n onScrollToLower: onScrollToLowerRef.current,\n threshold: thresholdRef.current,\n listContentLength: listContentLengthRef.current,\n }\n useListScrollElementAttach(\n useScrollElementMode && isH5,\n effectiveScrollElement,\n effectiveStartOffset,\n isHorizontal,\n setContainerLength,\n updateRenderOffset,\n scrollRefProp,\n scrollAttachRefsRef\n )\n useListScrollElementAttachWeapp(\n useScrollElementMode && isWeapp,\n effectiveScrollElement,\n effectiveStartOffsetRef,\n effectiveStartOffset,\n isHorizontal,\n setContainerLength,\n updateRenderOffset,\n scrollRefProp,\n scrollAttachRefsRef,\n initialContainerLength // 兜底:measure 未完成或失败时供 onScrollToUpper/Lower 及 containerLengthRef 使用\n )\n\n // 吸顶/吸左 header\n const stickyHeaderNode = React.useMemo(() => {\n if (!stickyHeader) return null\n for (let i = 0; i < sections.length; i++) {\n if (sectionOffsets[i] <= renderOffset && renderOffset < sectionOffsets[i + 1]) {\n const section = sections[i]\n if (section.header) {\n // 吸顶 header 不设固定 height/width,由内容撑开,避免「外部 60px 容器 + 实际内容 40+px」导致 header 内空白\n const stickyHeaderStyle: React.CSSProperties = {\n position: 'sticky',\n top: 0,\n left: 0,\n zIndex: 100,\n background: '#fff',\n boxSizing: 'border-box',\n minHeight: 20,\n overflow: 'hidden',\n lineHeight: 1\n }\n return (\n <View style={stickyHeaderStyle}>\n {section.header}\n </View>\n )\n }\n }\n }\n return null\n }, [stickyHeader, renderOffset, sectionOffsets, sections])\n\n // 渲染分组+item双层虚拟滚动\n const renderSections = () => {\n const nodes: React.ReactNode[] = []\n let offset = sectionOffsets[startSection]\n let globalItemIndex = 0 // 全局 item 索引(跨 section)\n\n // 计算起始 section 之前的所有 item 数量\n for (let s = 0; s < startSection; s++) {\n globalItemIndex += sections[s].items.length\n }\n\n for (let s = startSection; s <= endSection; s++) {\n const section = sections[s]\n const headerSize = getHeaderSize(s)\n const itemSizes = section.items.map((_, i) => getItemSize(globalItemIndex + i))\n // header\n if (section.header) {\n const sectionIndex = s\n // 动态测量时外层定位容器不设固定高度,由内层撑开\n const sectionHeaderStyle: React.CSSProperties = {\n position: 'absolute',\n zIndex: 2,\n boxSizing: 'border-box',\n width: '100%',\n minHeight: '20px',\n overflow: 'hidden',\n lineHeight: 1,\n ...(isHorizontal\n ? { top: 0, height: '100%', left: offset, width: props.useResizeObserver ? undefined : headerSize }\n : { top: offset, height: props.useResizeObserver ? undefined : headerSize })\n }\n\n // header ref 回调(用于 ResizeObserver 测量)\n const headerRefCallback = props.useResizeObserver ? (el: HTMLElement | null) => {\n if (el) {\n headerRefsRef.current.set(sectionIndex, el)\n resizeObserver.observe(el, -sectionIndex - 1) // 用负数索引区分 header 和 item\n const measureAndUpdateHeader = (measured: number) => {\n if (measured > 0) {\n const oldSize = headerSizeCacheRef.current.get(sectionIndex) ?? getDefaultHeaderSize()\n if (Math.abs(oldSize - measured) >= 1) {\n headerSizeCacheRef.current.set(sectionIndex, measured)\n if (isWeapp && props.useResizeObserver === true) {\n scheduleWeappDynamicReflow()\n } else if (sizeCacheRafRef.current == null) {\n sizeCacheRafRef.current = requestAnimationFrame(() => {\n sizeCacheRafRef.current = null\n setSizeCacheVersion((v) => v + 1)\n })\n }\n }\n }\n }\n if (isH5) {\n requestAnimationFrame(() => {\n if (!headerRefsRef.current.has(sectionIndex)) return\n const rect = el.getBoundingClientRect()\n measureAndUpdateHeader(isHorizontal ? rect.width : rect.height)\n })\n } else if (isWeapp) {\n Taro.nextTick(() => {\n if (!headerRefsRef.current.has(sectionIndex)) return\n Taro.createSelectorQuery()\n .select(`#${listId}-list-header-inner-${sectionIndex}`)\n .boundingClientRect((rect: any) => {\n if (rect) {\n measureAndUpdateHeader(isHorizontal ? rect.width : rect.height)\n }\n })\n .exec()\n })\n }\n } else {\n const oldEl = headerRefsRef.current.get(sectionIndex)\n if (oldEl) {\n resizeObserver.unobserve(oldEl)\n headerRefsRef.current.delete(sectionIndex)\n }\n }\n } : undefined\n\n // 动态尺寸时:外层定位,内层撑开以便测量\n const headerContentStyle: React.CSSProperties = props.useResizeObserver\n ? (\n isHorizontal\n // weapp 下 max-content 兼容性不稳定,改用 inline-flex 收缩包裹以测得真实宽度\n ? (isWeapp\n ? { boxSizing: 'border-box', display: 'inline-flex', height: '100%' }\n : { boxSizing: 'border-box', width: 'max-content', height: '100%' })\n : { boxSizing: 'border-box', width: '100%' }\n )\n : {}\n\n if (props.useResizeObserver) {\n const headerInnerProps: any = {\n ref: headerRefCallback,\n style: headerContentStyle,\n 'data-index': String(-sectionIndex - 1), // 用于 unobserve 获取 index;与 observe(el, -sectionIndex-1) 对应\n }\n if (isWeapp) {\n headerInnerProps.id = `${listId}-list-header-inner-${sectionIndex}`\n }\n nodes.push(\n React.createElement(View, {\n key: section.key + '-header',\n style: sectionHeaderStyle,\n }, React.createElement(View, headerInnerProps, section.header))\n )\n } else {\n nodes.push(\n React.createElement(View, {\n key: section.key + '-header',\n style: sectionHeaderStyle,\n }, section.header)\n )\n }\n offset += headerSize\n }\n // item offsets\n const itemOffsets = accumulate(itemSizes.map((size) => size + space))\n // 内层虚拟滚动:可见item区间\n let startItem = 0; let endItem = section.items.length - 1\n for (let i = 0; i < section.items.length; i++) {\n if (offset + itemOffsets[i + 1] > renderOffset) {\n startItem = Math.max(0, i - cacheCount)\n break\n }\n }\n for (let i = startItem; i < section.items.length; i++) {\n if (offset + itemOffsets[i] >= renderOffset + containerLength) {\n endItem = Math.min(section.items.length - 1, i + cacheCount)\n break\n }\n }\n\n // 更新可见起始索引(用于 ScrollCorrection)\n if (s === startSection && startItem === 0) {\n visibleStartIndexRef.current = globalItemIndex\n } else if (s === startSection) {\n visibleStartIndexRef.current = globalItemIndex + startItem\n }\n\n // 渲染可见item\n for (let i = startItem; i <= endItem; i++) {\n const currentGlobalIndex = globalItemIndex + i\n const itemId = `list-item-${currentGlobalIndex}`\n\n const sectionItemStyle: React.CSSProperties = {\n position: 'absolute',\n zIndex: 1,\n boxSizing: 'border-box',\n width: '100%',\n minHeight: '20px',\n overflow: 'hidden',\n lineHeight: 1,\n ...(isHorizontal\n ? {\n top: 0,\n height: '100%',\n left: offset + itemOffsets[i],\n width: itemSizes[i],\n marginRight: space\n }\n : {\n top: offset + itemOffsets[i],\n height: itemSizes[i],\n marginBottom: space\n })\n }\n\n // ResizeObserver:绑定内层内容容器测量真实尺寸,尺寸变化时才 bump 版本\n const refCallback = (el: HTMLElement | null) => {\n if (el) {\n const capturedIndex = currentGlobalIndex\n itemRefsRef.current.set(capturedIndex, el)\n resizeObserver.observe(el, capturedIndex)\n\n // H5:使用 getBoundingClientRect 进行 fallback 测量\n // 小程序:使用 SelectorQuery 进行 fallback 测量(小程序没有 getBoundingClientRect)\n const measureAndUpdate = (measured: number) => {\n if (measured > 0) {\n const oldSize = sizeCache.getItemSize(capturedIndex)\n if (Math.abs(oldSize - measured) < 1) return\n sizeCache.setItemSize(capturedIndex, measured)\n scrollCorrection.recordSizeChange(capturedIndex, oldSize, measured)\n if (isWeapp && props.useResizeObserver === true) {\n scheduleWeappDynamicReflow()\n } else if (sizeCacheRafRef.current == null) {\n sizeCacheRafRef.current = requestAnimationFrame(() => {\n sizeCacheRafRef.current = null\n setSizeCacheVersion((v) => v + 1)\n })\n }\n // 小程序:延迟 onItemSizeChange,避免父组件重渲染导致 List remount\n if (isWeapp) {\n weappDeferItemSizeChange(capturedIndex, measured, props.onItemSizeChange)\n } else {\n props.onItemSizeChange?.(capturedIndex, measured)\n }\n }\n }\n\n if (isH5) {\n requestAnimationFrame(() => {\n if (!itemRefsRef.current.has(capturedIndex)) return\n const rect = el.getBoundingClientRect()\n measureAndUpdate(isHorizontal ? rect.width : rect.height)\n })\n } else if (isWeapp) {\n // 小程序端:使用 SelectorQuery 测量内层内容容器的实际尺寸\n // 注意:必须选 inner 容器(无固定高度,由内容撑开),不能选 outer(有虚拟列表设置的固定高度)\n // 已测量过的 item 跳过,避免 refCallback 重复触发导致无限循环\n // 滚动期间跳过 SelectorQuery(不加入 weappMeasuredItemsRef),避免异步查询干扰 scroll-view\n // SelectorQuery 是只读查询,滚动期间执行安全\n if (shouldMeasureWeappItem(capturedIndex, weappMeasuredItemsRef.current)) {\n weappMeasuredItemsRef.current.add(capturedIndex)\n // 使用 Taro.nextTick 代替 setTimeout(50):等待下一帧渲染完成后再测量\n // 比固定延时更快(减少\"预估→实测\"闪烁)且更可靠(保证 DOM 已更新)\n Taro.nextTick(() => {\n if (!itemRefsRef.current.has(capturedIndex)) return\n Taro.createSelectorQuery()\n // 页面上可能同时存在多个 List,inner id 必须带 listId 前缀避免跨列表误命中\n .select(`#${listId}-list-item-inner-${capturedIndex}`)\n .boundingClientRect((rect: any) => {\n if (rect) {\n measureAndUpdate(isHorizontal ? rect.width : rect.height)\n }\n })\n .exec()\n })\n }\n }\n } else {\n const oldEl = itemRefsRef.current.get(currentGlobalIndex)\n if (oldEl) {\n resizeObserver.unobserve(oldEl)\n itemRefsRef.current.delete(currentGlobalIndex)\n }\n }\n }\n\n // 动态尺寸时:外层负责定位,内层由内容撑开以便测量真实尺寸。\n // 纵向:内层 width:100% 无 height,由内容撑开,测到的是内容高度。\n // 横向:width:max-content + height:100%:\n // - width:max-content 便于测量真实宽度;\n // - height:100% 让测量层与外层 slot 条带高度一致,避免「外层条带 180px、内层 wrapper 只有内容高度」导致的内外高度差。\n const contentWrapperStyle: React.CSSProperties = props.useResizeObserver\n ? (\n isHorizontal\n // weapp 下 max-content 兼容性不稳定,改用 inline-flex 收缩包裹以测得真实宽度\n ? (isWeapp\n ? { boxSizing: 'border-box', display: 'inline-flex', height: '100%' }\n : { boxSizing: 'border-box', width: 'max-content', height: '100%' })\n : { boxSizing: 'border-box', width: '100%' }\n )\n : {}\n\n const outerItemProps: any = {\n key: section.key + '-item-' + i,\n id: itemId,\n style: sectionItemStyle,\n }\n\n if (props.useResizeObserver) {\n const innerProps: any = {\n ref: refCallback,\n style: contentWrapperStyle,\n }\n // 小程序端需要 id 用于 SelectorQuery 测量内容真实尺寸;H5 端不需要(用 getBoundingClientRect)\n if (isWeapp) {\n // 页面内多 List 并存时避免 id 冲突(例如 demo 同页含多个 List)\n innerProps.id = `${listId}-list-item-inner-${currentGlobalIndex}`\n }\n innerProps['data-index'] = String(currentGlobalIndex)\n const itemNode = React.createElement(View, outerItemProps, React.createElement(View, innerProps, section.items[i]))\n // 任务 4.1:当 List 暴露 scrollRef 时,为每个 item 提供 Context,供内层 WaterFlow 使用\n const itemWithContext = scrollRefProp && !useScrollElementMode\n ? React.createElement(ScrollElementContextOrFallback.Provider, {\n key: outerItemProps.key,\n value: {\n scrollRef: scrollRefProp,\n containerHeight: containerLength,\n startOffset: offset + itemOffsets[i],\n reportNestedHeightChange: props.useResizeObserver\n ? (h: number) => handleReportNestedHeightChange(h, currentGlobalIndex)\n : undefined,\n },\n }, itemNode)\n : itemNode\n nodes.push(itemWithContext)\n } else {\n const itemNode = React.createElement(View, outerItemProps, section.items[i])\n const itemWithContext = scrollRefProp && !useScrollElementMode\n ? React.createElement(ScrollElementContextOrFallback.Provider, {\n key: outerItemProps.key,\n value: {\n scrollRef: scrollRefProp,\n containerHeight: containerLength,\n startOffset: offset + itemOffsets[i],\n reportNestedHeightChange: props.useResizeObserver\n ? (h: number) => handleReportNestedHeightChange(h, currentGlobalIndex)\n : undefined,\n },\n }, itemNode)\n : itemNode\n nodes.push(itemWithContext)\n }\n }\n\n globalItemIndex += section.items.length\n offset += itemOffsets[itemOffsets.length - 1]\n }\n\n return nodes\n }\n\n // 渲染 NoMore 内容\n const renderNoMoreContent = () => {\n if (!noMoreConfig || !noMoreConfig.visible) return null\n\n const noMoreHeightValue = noMoreConfig.height || 60\n const listContentEnd = sectionOffsets[sectionOffsets.length - 1]\n\n const defaultStyle: React.CSSProperties = {\n position: 'absolute',\n ...(isHorizontal\n ? { left: listContentEnd, top: 0, width: noMoreHeightValue, height: '100%' }\n : { top: listContentEnd, left: 0, width: '100%', height: noMoreHeightValue }\n ),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n color: '#999',\n fontSize: '14px',\n boxSizing: 'border-box',\n ...noMoreConfig.style\n }\n\n return (\n <View style={defaultStyle}>\n {noMoreConfig.children || noMoreConfig.text || '没有更多了'}\n </View>\n )\n }\n\n // 空列表场景:仅显示 NoMore\n if (sections.length === 0 && noMoreConfig?.visible) {\n return (\n <ScrollView ref={containerRef as any} {...scrollViewProps}>\n <View style={{\n minHeight: containerLength,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...containerStyle\n }}>\n {renderNoMoreContent()}\n </View>\n </ScrollView>\n )\n }\n\n // 可滚区域总尺寸\n // H5 refresher 用负 translateY 隐藏,有上方混排时可能延伸到 sibling 区域;overflow:hidden 裁剪避免重叠\n const needsRefresherClip = refresherHeightForH5 > 0\n const contentWrapperStyle: React.CSSProperties = isHorizontal\n ? { width: totalLength, position: 'relative', height: '100%', ...(needsRefresherClip && { overflow: 'hidden' }) }\n : { height: totalLength, position: 'relative', width: '100%', ...(needsRefresherClip && { overflow: 'hidden' }) }\n const listWrapperStyle: React.CSSProperties = isHorizontal\n ? { width: listContentLength, position: 'relative' as const, height: '100%' }\n : { height: listContentLength, position: 'relative' as const, width: '100%' }\n const pullTranslate: React.CSSProperties =\n refresherHeightForH5 > 0 && h5RefresherProps.pullDistance !== 0\n ? { transform: `translateY(${h5RefresherProps.pullDistance}px)` }\n : {}\n const h5RefresherTranslateY = -refresherHeightForH5 + h5RefresherProps.pullDistance\n\n // 内容区域渲染\n const renderContentArea = () => (\n <View style={contentWrapperStyle}>\n {refresherHeightForH5 > 0 ? (\n <>\n {/* H5 刷新层默认上移隐藏;下拉时按 pullDistance 同步露出 */}\n <View\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: refresherHeightForH5,\n zIndex: 0,\n transform: `translateY(${h5RefresherTranslateY}px)`,\n }}\n >\n {renderRefresherContent()}\n </View>\n {/* 列表在上方:zIndex 高盖住刷新层,下拉时 translateY 下移露出下面刷新内容 */}\n {/* 需要 background 遮住下方刷新层,因为 renderSections 是 absolute 定位不占流空间 */}\n <View style={{ ...listWrapperStyle, ...pullTranslate, zIndex: 1, background: style?.background ?? style?.backgroundColor ?? '#fff' }}>\n {stickyHeaderNode}\n {renderSections()}\n {renderNoMoreContent()}\n </View>\n </>\n ) : (\n <>\n {!supportsNativeRefresher && renderRefresherContent()}\n {stickyHeaderNode}\n {renderSections()}\n {renderNoMoreContent()}\n </>\n )}\n </View>\n )\n\n // useScrollElementMode 或 needAutoFind&&pending:渲染 View 以便监听外部滚动或 probe 阶段查找滚动父节点\n const renderView = useScrollElementMode || (!!needAutoFind && autoFindStatus === 'pending')\n if (renderView) {\n // 任务 2.4:恢复 refresher DOM 结构(refresher 层 + listWrapperStyle)\n return (\n <View ref={contentWrapperRef as any} id={contentId} style={contentWrapperStyle}>\n {refresherHeightForH5 > 0 ? (\n <>\n <View\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: refresherHeightForH5,\n zIndex: 0,\n transform: `translateY(${h5RefresherTranslateY}px)`,\n }}\n >\n {renderRefresherContent()}\n </View>\n <View style={{ ...listWrapperStyle, ...pullTranslate, zIndex: 1, background: style?.background ?? style?.backgroundColor ?? '#fff' }}>\n {stickyHeaderNode}\n {renderSections()}\n {renderNoMoreContent()}\n </View>\n </>\n ) : (\n <>\n {stickyHeaderNode}\n {renderSections()}\n {renderNoMoreContent()}\n </>\n )}\n </View>\n )\n }\n\n return (\n <ScrollView ref={containerRef as any} {...scrollViewProps} id={listId}>\n {/* 小程序:slot=\"refresher\" 必须是 ScrollView 的直接子元素 */}\n {supportsNativeRefresher && renderRefresherContent()}\n {renderContentArea()}\n </ScrollView>\n )\n}\n\nconst List = React.forwardRef<ListHandle, ListProps>(InnerList)\n\nexport { List, ListItem, NoMore, StickyHeader, StickySection }\n\nexport default List\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/list/index.tsx"],"sourcesContent":["import { ScrollView, View } from '@tarojs/components'\nimport Taro from '@tarojs/taro'\nimport React from 'react'\n\nimport { getScrollViewContextNode } from '../../utils'\nimport { ScrollElementContextOrFallback } from '../../utils/scrollElementContext'\nimport { useItemSizeCache } from './hooks/useItemSizeCache'\nimport { useListNestedScroll } from './hooks/useListNestedScroll'\nimport { type ListScrollElementAttachRefs, useListScrollElementAttach } from './hooks/useListScrollElementAttach'\nimport { useListScrollElementAttachWeapp } from './hooks/useListScrollElementAttachWeapp'\nimport { type ListRefresherConfig, DEFAULT_REFRESHER_HEIGHT, useRefresher } from './hooks/useRefresher'\nimport { useResizeObserver } from './hooks/useResizeObserver'\nimport { useScrollCorrection } from './hooks/useScrollCorrection'\nimport ListItem from './ListItem'\nimport NoMore, { type NoMoreProps } from './NoMore'\nimport StickyHeader from './StickyHeader'\nimport StickySection from './StickySection'\nimport { isH5, isWeapp, supportsNativeRefresher } from './utils'\n\n/** 与官方 List.d.ts / ScrollView / harmony 对齐,不增减已有语义;扩展项仅用于高级能力 */\nexport interface ListProps {\n // ===== 与 ScrollView / List.d.ts 一致 =====\n showScrollbar?: boolean\n scrollTop?: number\n scrollX?: boolean\n scrollY?: boolean\n onScroll?: (e: { scrollTop: number, scrollLeft: number, detail: { scrollTop: number, scrollLeft: number } }) => void\n onScrollToUpper?: () => void\n onScrollToLower?: () => void\n upperThreshold?: number\n lowerThreshold?: number\n /** 与 ScrollView cacheExtent 对齐(视口外渲染距离),可选 */\n cacheExtent?: number\n /** 与 ScrollView enableBackToTop 对齐 */\n enableBackToTop?: boolean\n /** 与 ScrollView onScrollStart 对齐 */\n onScrollStart?: () => void\n /** 与 ScrollView onScrollEnd 对齐 */\n onScrollEnd?: () => void\n scrollIntoView?: string\n /** 透传给最外层 ScrollView 的 className,便于自定义样式 */\n className?: string\n\n // ===== 与 harmony-cpp ListProps / ListBuilder 对齐 =====\n stickyHeader?: boolean\n space?: number\n cacheCount?: number\n itemData?: any[]\n itemSize?: number | ((index: number, data?: any[]) => number)\n height?: number | string\n width?: number | string\n style?: React.CSSProperties\n children?: React.ReactNode\n /** Header 沿滚动方向尺寸;未传时回退到 itemSize */\n headerSize?: number\n\n // ===== 动态尺寸(与 type=\"dynamic\" 语义对齐)=====\n useResizeObserver?: boolean\n onItemSizeChange?: (index: number, size: number) => void\n\n // ===== NoMore 底部提示 =====\n showNoMore?: boolean\n noMoreText?: string\n noMoreStyle?: React.CSSProperties\n renderNoMore?: () => React.ReactNode\n\n // ===== 扩展:可见索引回调 =====\n onScrollIndex?: (start: number, end: number) => void\n\n // ===== 与 dynamic/harmony 对齐:List 自身可配置下拉刷新,无需 Refresher 子组件 =====\n /** 是否开启下拉刷新;与 Refresher 子组件二选一或同时存在(Refresher 子覆盖同名字段) */\n refresherEnabled?: boolean\n refresherThreshold?: number\n refresherDefaultStyle?: 'black' | 'white' | 'none'\n refresherBackground?: string\n refresherTriggered?: boolean\n onRefresherPulling?: (e?: { detail?: { deltaY?: number } }) => void\n onRefresherRefresh?: () => void | Promise<void>\n onRefresherRestore?: () => void\n onRefresherAbort?: () => void\n onRefresherWillRefresh?: () => void\n onRefresherStatusChange?: (e?: { detail?: { status?: number, dy?: number } }) => void\n\n // ===== 扩展:嵌套滚动(H5,借鉴 react-virtualized scrollElement)=====\n /** 是否嵌套模式,与 plato 对齐;true=使用父级滚动,需配合 scrollElement 或 Context;不传或 false=default */\n nestedScroll?: boolean\n /** 自定义滚动容器 ref,nestedScroll 模式下从 props 或 Context 获取 */\n scrollElement?: React.RefObject<HTMLElement | null>\n /** 暴露滚动容器 ref,供内层 List/WaterFlow(nestedScroll)嵌套时传入 scrollElement */\n scrollRef?: React.MutableRefObject<HTMLElement | null>\n}\n\nexport interface ListHandle {\n scroll: (options?: {\n top?: number\n left?: number\n }) => void\n}\n\nexport function accumulate(arr: number[]) {\n const result = [0]\n for (let i = 0; i < arr.length; i++) {\n result[i + 1] = result[i] + arr[i]\n }\n return result\n}\n\nexport function isShaking(diffList: number[]): boolean {\n if (diffList.length < 3) return false\n const signs = diffList.map(diff => Math.sign(diff))\n let alternations = 0\n for (let i = 1; i < signs.length; i++) {\n if (signs[i] !== 0 && signs[i] !== signs[i - 1]) alternations++\n }\n return alternations >= 2\n}\n\n// 小程序端:判断 item 是否应该执行 SelectorQuery 测量(仅检查是否已测量过)\n// SelectorQuery 是只读查询,不会触发 setData,滚动期间执行是安全的\nfunction shouldMeasureWeappItem(index: number, measuredSet: Set<number>): boolean {\n return !measuredSet.has(index)\n}\n\n// 小程序端暂不外抛 onItemSizeChange,避免父层重渲染导致 List remount 引发回顶或空白\nfunction weappDeferItemSizeChange(_index: number, _size: number, _onItemSizeChange?: (index: number, size: number) => void) {}\n\n/** 向后兼容:ListScrollElementContext 已统一为 ScrollElementContext,无 Context 时兜底为 fallback */\nexport { ScrollElementContextOrFallback as ListScrollElementContext } from '../../utils/scrollElementContext'\n\n\n/** 从 scroll 选项解析目标偏移量 */\nfunction resolveScrollTargetOffset(\n options: { top?: number, left?: number } | undefined,\n isHorizontal: boolean\n): number {\n const opts = options ?? {}\n const top = typeof opts.top === 'number' ? opts.top : undefined\n const left = typeof opts.left === 'number' ? opts.left : undefined\n let result = 0\n if (isHorizontal) {\n if (typeof left === 'number') result = left\n else if (typeof top === 'number') result = top\n } else {\n if (typeof top === 'number') result = top\n else if (typeof left === 'number') result = left\n }\n return Number.isFinite(result) ? result : 0\n}\n\n// eslint-disable-next-line complexity -- List 多端/多模式逻辑集中,已抽离 useListNestedScroll、useListScrollElementAttach、resolveScrollTargetOffset 等\nconst InnerList = (props: ListProps, ref: React.Ref<ListHandle | null>) => {\n const {\n stickyHeader = false,\n space = 0,\n height = 400,\n width = '100%',\n showScrollbar = true,\n scrollTop: controlledScrollTop,\n scrollX = false,\n scrollY = true,\n onScroll,\n onScrollToUpper,\n onScrollToLower,\n onScrollStart,\n onScrollEnd,\n upperThreshold = 50,\n lowerThreshold = 50,\n cacheCount = 2,\n cacheExtent,\n enableBackToTop,\n className,\n style,\n children,\n nestedScroll,\n scrollElement,\n scrollRef: scrollRefProp,\n } = props\n\n const isHorizontal = scrollX === true\n const listType = nestedScroll === true ? 'nested' : 'default'\n const {\n effectiveScrollElement,\n effectiveStartOffset,\n effectiveStartOffsetRef,\n useScrollElementMode,\n needAutoFind,\n autoFindStatus,\n contentWrapperRef,\n contentId,\n } = useListNestedScroll(listType, scrollElement, undefined, isHorizontal)\n const DEFAULT_ITEM_WIDTH = 120\n const DEFAULT_ITEM_HEIGHT = 40\n const defaultItemSize = isHorizontal ? DEFAULT_ITEM_WIDTH : DEFAULT_ITEM_HEIGHT\n\n const normalizeSize = React.useCallback((value: unknown): number | null => {\n if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) return null\n return value\n }, [])\n\n const resolveItemSizeByIndex = React.useCallback((index: number, fallback: number) => {\n const { itemSize, itemData } = props\n const numberSize = normalizeSize(itemSize)\n if (numberSize != null) return numberSize\n if (typeof itemSize === 'function') {\n const functionSize = normalizeSize(itemSize(index, itemData))\n if (functionSize != null) return functionSize\n }\n return fallback\n }, [props.itemSize, props.itemData, normalizeSize])\n\n // 滚动状态管理\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n // 生成唯一 List ID(用于小程序 ResizeObserver)\n const listId = React.useMemo(() => `list-${Math.random().toString(36).slice(2, 11)}`, [])\n\n // 渲染偏移量 - 用于计算应该渲染哪些元素\n const [renderOffset, setRenderOffset] = React.useState(controlledScrollTop ?? 0)\n\n // 程序性滚动用的目标偏移;用户滑动期间不更新,避免与原生滚动冲突\n const [scrollViewOffset, setScrollViewOffset] = React.useState(controlledScrollTop ?? 0)\n\n // 用户正在滑动时不再向 ScrollView 传 scrollTop,让滚动完全由原生接管\n const [isUserScrolling, setIsUserScrolling] = React.useState(false)\n // isUserScrolling 的 ref 镜像,供异步上下文读取最新值\n const isUserScrollingRef = React.useRef(false)\n\n const initialContainerLength = typeof (isHorizontal ? width : height) === 'number' ? (isHorizontal ? (width as number) : (height as number)) : 400\n const [containerLength, setContainerLength] = React.useState<number>(initialContainerLength)\n\n // 用容器实际尺寸更新视口长度,避免 props 与 CSS 不一致导致底部空白\n React.useEffect(() => {\n const el = containerRef.current\n if (!el || typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { contentRect } = entry\n const measured = isHorizontal ? contentRect.width : contentRect.height\n if (measured > 0) setContainerLength(measured)\n }\n })\n ro.observe(el)\n return () => ro.disconnect()\n }, [isHorizontal])\n\n // 滚动追踪相关refs\n const isScrollingRef = React.useRef(false)\n const lastScrollTopRef = React.useRef(controlledScrollTop ?? 0)\n const scrollDiffListRef = React.useRef<number[]>([0, 0, 0])\n const scrollTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n // H5:仅程序性滚动时写回 DOM scrollTop,用户滑动结束后不写回避免卡顿\n const programmaticScrollRef = React.useRef(false)\n // 小程序端程序性滚动冷却期:handleScroll 只更新 renderOffset,避免 scrollIntoView 后被原生回调拉回\n const programmaticCooldownRef = React.useRef(false)\n const programmaticCooldownTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n const scrollViewOffsetRef = React.useRef(0)\n // 处理渲染偏移量更新。\n // syncToScrollView=true:程序性滚动,立即同步 scrollViewOffset。\n // syncToScrollView=false:用户滑动,仅更新 renderOffset。weapp 采用 recycle-view 策略:不把用户滑动位置同步到 scrollViewOffset,避免「传滞后值拉回」和「从有到无归顶」。\n const updateRenderOffset = React.useCallback((newOffset: number, syncToScrollView?: boolean, source?: string) => {\n lastScrollTopRef.current = newOffset\n isScrollingRef.current = true\n\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current)\n }\n\n setRenderOffset(newOffset) // 始终更新虚拟列表用到的偏移\n\n if (syncToScrollView) {\n isUserScrollingRef.current = false\n setIsUserScrolling(false)\n // 小程序:target===sv 时 ScrollView 认为无变化不滚动→白屏;imperative/scrollIntoView 时先传中间值再 RAF 传 target 强制触发\n // target=0 用 +0.01;target>0 用 -0.01(统一 +0.01 到底部会被 clamp 成同值无效)\n const same = isWeapp && Math.abs(scrollViewOffsetRef.current - newOffset) < 1\n const needForce = same && (source === 'imperative' || source === 'scrollIntoView')\n if (needForce) {\n const intermediate = newOffset > 0 ? newOffset - 0.01 : 0.01\n setScrollViewOffset(intermediate)\n requestAnimationFrame(() => {\n setScrollViewOffset(newOffset)\n })\n } else {\n setScrollViewOffset(newOffset)\n }\n programmaticScrollRef.current = true\n if (isWeapp) {\n programmaticCooldownRef.current = true\n if (programmaticCooldownTimerRef.current) {\n clearTimeout(programmaticCooldownTimerRef.current)\n }\n programmaticCooldownTimerRef.current = setTimeout(() => {\n programmaticCooldownRef.current = false\n }, 500)\n }\n } else {\n isUserScrollingRef.current = true\n setIsUserScrolling(true)\n }\n\n scrollTimeoutRef.current = setTimeout(() => {\n isScrollingRef.current = false\n if (!syncToScrollView) {\n isUserScrollingRef.current = false\n setIsUserScrolling(false)\n // weapp recycle-view 策略:用户滑动结束后不同步 scrollViewOffset,保持 pass 的值不变,避免 从有到无 归顶\n if (!isWeapp) {\n setScrollViewOffset(lastScrollTopRef.current)\n }\n }\n }, isWeapp ? 200 : 150)\n }, [])\n\n // 暴露给外部的实例方法:通过 ref.scroll({ top / left }) 进行程序性滚动\n React.useImperativeHandle(\n ref,\n () => ({\n scroll(options) {\n const targetOffset = resolveScrollTargetOffset(options, isHorizontal)\n const el = effectiveScrollElement?.current\n if (el && isH5) {\n const scrollTarget = targetOffset + effectiveStartOffset\n if (isHorizontal) {\n el.scrollTo({ left: scrollTarget })\n } else {\n el.scrollTo({ top: scrollTarget })\n }\n updateRenderOffset(targetOffset, false, 'scrollElement')\n } else if (el && isWeapp && useScrollElementMode) {\n // 小程序 scrollElement 模式:需通过 getScrollViewContextNode + node.scrollTo 真正滚动外部 scroll-view\n // updateRenderOffset 必须在 scrollTo 之后调用,否则 getScrollViewContextNode 异步期间会先更新 renderOffset 导致闪一下\n const startOff = effectiveStartOffsetRef.current\n const scrollTarget = targetOffset + startOff\n const scrollViewId = (el as any).id || `_ls_${listId}`\n if (!(el as any).id) (el as any).id = scrollViewId\n getScrollViewContextNode(`#${scrollViewId}`).then((node: any) => {\n if (isHorizontal) {\n node?.scrollTo?.({ left: scrollTarget, animated: false })\n } else {\n node?.scrollTo?.({ top: scrollTarget, animated: false })\n }\n updateRenderOffset(targetOffset, true, 'imperative')\n })\n } else {\n updateRenderOffset(targetOffset, true, 'imperative')\n }\n },\n }),\n [scrollX, effectiveScrollElement, effectiveStartOffset, effectiveStartOffsetRef, isH5, isWeapp, isHorizontal, listId, useScrollElementMode, updateRenderOffset]\n )\n\n // 提取 Refresher 配置(List 属性为 base,Refresher 子组件覆盖)\n const refresherConfig = React.useMemo((): ListRefresherConfig | null => {\n const listRefresherEnabled = props.refresherEnabled !== false && (\n props.refresherEnabled === true || props.onRefresherRefresh != null\n )\n const baseFromList: ListRefresherConfig | null = listRefresherEnabled\n ? {\n refresherEnabled: props.refresherEnabled,\n refresherThreshold: props.refresherThreshold,\n refresherDefaultStyle: props.refresherDefaultStyle,\n refresherBackground: props.refresherBackground,\n refresherTriggered: props.refresherTriggered,\n onRefresherPulling: props.onRefresherPulling,\n onRefresherRefresh: props.onRefresherRefresh,\n onRefresherRestore: props.onRefresherRestore,\n onRefresherAbort: props.onRefresherAbort,\n onRefresherWillRefresh: props.onRefresherWillRefresh,\n onRefresherStatusChange: props.onRefresherStatusChange,\n }\n : null\n\n const isRefresherComponent = (child: React.ReactElement): boolean => {\n const type = child.type as any\n return type?.displayName === 'Refresher' || type?.name === 'Refresher'\n }\n\n let refresherChildProps: ListRefresherConfig | null = null\n let refresherCount = 0\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && isRefresherComponent(child)) {\n refresherCount++\n if (refresherCount > 1) {\n return\n }\n refresherChildProps = child.props as ListRefresherConfig\n }\n })\n\n if (refresherChildProps != null) {\n const base = baseFromList ?? {}\n // Refresher 子组件的配置覆盖 List 的配置\n return {\n ...base,\n ...refresherChildProps,\n } as ListRefresherConfig\n }\n return baseFromList\n }, [\n children,\n props.refresherEnabled,\n props.refresherThreshold,\n props.refresherDefaultStyle,\n props.refresherBackground,\n props.refresherTriggered,\n props.onRefresherPulling,\n props.onRefresherRefresh,\n props.onRefresherRestore,\n props.onRefresherAbort,\n props.onRefresherWillRefresh,\n props.onRefresherStatusChange,\n ])\n\n // 提取 NoMore 配置\n const noMoreConfig = React.useMemo(() => {\n let config: NoMoreProps | null = null\n let noMoreCount = 0\n\n // 从子组件中提取 NoMore\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && child.type === NoMore) {\n noMoreCount++\n if (noMoreCount > 1) {\n return\n }\n const childProps = child.props as NoMoreProps\n config = { ...childProps, visible: childProps.visible !== false }\n }\n })\n\n // Props 方式转换为配置(优先级低于子组件)\n if (props.showNoMore && !config) {\n config = {\n visible: true,\n text: props.noMoreText,\n style: props.noMoreStyle,\n children: props.renderNoMore?.()\n }\n }\n\n return config\n }, [children, props.showNoMore, props.noMoreText, props.noMoreStyle, props.renderNoMore])\n\n // Refresher 平台适配:H5 用 addImperativeTouchListeners\n const {\n scrollViewRefresherProps,\n scrollViewRefresherHandlers,\n h5RefresherProps,\n addImperativeTouchListeners,\n renderRefresherContent,\n } = useRefresher(\n refresherConfig,\n isH5 && refresherConfig && !supportsNativeRefresher ? 0 : renderOffset,\n useScrollElementMode\n ? (ev: TouchEvent) => (ev.target != null && contentWrapperRef.current?.contains(ev.target as Node)) ?? false\n : undefined\n )\n const refresherTeardownRef = React.useRef<(() => void) | null>(null)\n const addImperativeTouchListenersRef = React.useRef(addImperativeTouchListeners)\n addImperativeTouchListenersRef.current = addImperativeTouchListeners\n React.useEffect(() => () => {\n if (refresherTeardownRef.current) refresherTeardownRef.current()\n }, [])\n\n // H5 下拉刷新顶栏高度(默认 50px,来自 useRefresher)\n const refresherHeightForH5 = (isH5 && refresherConfig && !supportsNativeRefresher && refresherConfig.refresherEnabled !== false) ? DEFAULT_REFRESHER_HEIGHT : 0\n\n // 解析分组结构:StickySection、ListItem 为直接子组件,过滤 Refresher/NoMore\n const sections = React.useMemo(() => {\n const result: Array<{\n header: React.ReactElement | null\n items: React.ReactElement[]\n key: string\n }> = []\n const defaultItems: React.ReactElement[] = []\n React.Children.forEach(children, (child, idx) => {\n if (React.isValidElement(child) && child.type === StickySection) {\n const sectionProps = child.props as any\n let header: React.ReactElement | null = null\n const items: React.ReactElement[] = []\n React.Children.forEach(sectionProps.children, (subChild) => {\n if (React.isValidElement(subChild) && subChild.type === StickyHeader) header = subChild\n else if (React.isValidElement(subChild) && subChild.type === ListItem) items.push(subChild)\n })\n result.push({ header, items, key: child.key || String(idx) })\n } else if (React.isValidElement(child) && child.type === ListItem) {\n defaultItems.push(child)\n }\n })\n if (defaultItems.length > 0) {\n result.push({ header: null, items: defaultItems, key: 'default' })\n }\n return result\n }, [children])\n\n // 动态尺寸管理\n const estimatedSize = resolveItemSizeByIndex(0, defaultItemSize)\n\n // 计算总 item 数量(跨所有 section)\n const totalItemCount = React.useMemo(() => {\n return sections.reduce((sum, section) => sum + section.items.length, 0)\n }, [sections])\n\n // 存储元素引用(用于 ResizeObserver)\n const itemRefsRef = React.useRef<Map<number, HTMLElement | null>>(new Map())\n // 存储 header 元素引用(用于 ResizeObserver)\n const headerRefsRef = React.useRef<Map<number, HTMLElement | null>>(new Map())\n // 小程序端:已完成 SelectorQuery 测量的 item 索引集,避免 refCallback 重复触发测量导致无限循环\n const weappMeasuredItemsRef = React.useRef<Set<number>>(new Set())\n // 动态尺寸缓存更新版本:setItemSize 后递增,用于驱动 sectionOffsets/totalLength 与 item 定位重算\n const [sizeCacheVersion, setSizeCacheVersion] = React.useState(0)\n const sizeCacheRafRef = React.useRef<number | null>(null)\n // 小程序端:测量触发 re-render 时,reflow 帧传 eff 并同步 scrollViewOffset,避免下一帧传 0 导致跳变\n const measureScrollProtectRef = React.useRef(false)\n // 动态尺寸缓存\n const sizeCache = useItemSizeCache({\n isHorizontal,\n estimatedSize,\n itemCount: totalItemCount\n })\n\n // header 动态尺寸缓存(sectionIndex -> size)\n const headerSizeCacheRef = React.useRef<Map<number, number>>(new Map())\n\n // 滚动修正的可见起始索引\n const visibleStartIndexRef = React.useRef(0)\n\n // ScrollTop 修正(仅 H5):动高时尺寸变化自动修正 scrollTop\n const scrollCorrectionEnabled = !isWeapp && props.useResizeObserver === true\n const scrollCorrection = useScrollCorrection({\n enabled: scrollCorrectionEnabled,\n visibleStartIndexRef,\n setScrollOffset: (offsetOrUpdater) => {\n const newOffset = typeof offsetOrUpdater === 'function'\n ? offsetOrUpdater(renderOffset)\n : offsetOrUpdater\n updateRenderOffset(newOffset, true, 'scrollCorrection') // 程序性修正需同步到 ScrollView\n }\n })\n const scrollCorrectionRef = React.useRef(scrollCorrection)\n scrollCorrectionRef.current = scrollCorrection\n const onScrollRef = React.useRef(onScroll)\n onScrollRef.current = onScroll\n const onScrollToUpperRef = React.useRef(onScrollToUpper)\n onScrollToUpperRef.current = onScrollToUpper\n const onScrollToLowerRef = React.useRef(onScrollToLower)\n onScrollToLowerRef.current = onScrollToLower\n const thresholdRef = React.useRef({ upper: upperThreshold, lower: lowerThreshold })\n thresholdRef.current = { upper: upperThreshold, lower: lowerThreshold }\n const listContentLengthRef = React.useRef(0)\n const inUpperZoneRef = React.useRef(true)\n const inLowerZoneRef = React.useRef(false)\n\n // 小程序 + 动高(virtual-list 风格):测量变化后同帧重排,不做程序性 scrollTop 回拉\n const scheduleWeappDynamicReflow = React.useCallback(() => {\n if (!isWeapp || props.useResizeObserver !== true) return\n if (sizeCacheRafRef.current != null) return\n sizeCacheRafRef.current = requestAnimationFrame(() => {\n sizeCacheRafRef.current = null\n measureScrollProtectRef.current = true\n setSizeCacheVersion((v) => v + 1)\n })\n }, [isWeapp, props.useResizeObserver])\n\n // ResizeObserver(当启用动态测量时)\n const resizeObserver = useResizeObserver({\n enabled: props.useResizeObserver === true,\n isHorizontal,\n listId,\n onResize: (index, size) => {\n const oldSize = sizeCache.getItemSize(index)\n sizeCache.setItemSize(index, size)\n\n if (Math.abs(oldSize - size) >= 1) {\n if (isWeapp && props.useResizeObserver === true) {\n scheduleWeappDynamicReflow()\n } else if (sizeCacheRafRef.current == null) {\n sizeCacheRafRef.current = requestAnimationFrame(() => {\n sizeCacheRafRef.current = null\n setSizeCacheVersion((v) => v + 1)\n })\n }\n }\n\n // 触发 ScrollTop 修正\n scrollCorrection.recordSizeChange(index, oldSize, size)\n\n // 小程序:延迟 onItemSizeChange,避免父组件重渲染导致 List remount\n // H5:直接回调\n if (isWeapp) {\n weappDeferItemSizeChange(index, size, props.onItemSizeChange)\n } else {\n props.onItemSizeChange?.(index, size)\n }\n }\n })\n\n // 嵌套滚动:内层高度变化上报\n const handleReportNestedHeightChange = React.useCallback((height: number, index: number) => {\n if (height <= 0) return\n const estimatedHeader = estimatedSize * 0.5\n const fullHeight = height + estimatedHeader\n const oldSize = sizeCache.getItemSize(index)\n if (Math.abs(oldSize - fullHeight) < 1) return\n sizeCache.setItemSize(index, fullHeight)\n scrollCorrection.recordSizeChange(index, oldSize, fullHeight)\n if (isWeapp && props.useResizeObserver === true) {\n scheduleWeappDynamicReflow()\n } else if (sizeCacheRafRef.current == null) {\n sizeCacheRafRef.current = requestAnimationFrame(() => {\n sizeCacheRafRef.current = null\n setSizeCacheVersion((v) => v + 1)\n })\n }\n }, [sizeCache, scrollCorrection, estimatedSize, isWeapp, props.useResizeObserver, scheduleWeappDynamicReflow])\n\n const getDefaultHeaderSize = React.useCallback(() => {\n const headerSize = normalizeSize(props.headerSize)\n if (headerSize != null) return headerSize\n return resolveItemSizeByIndex(0, defaultItemSize)\n }, [props.headerSize, resolveItemSizeByIndex, defaultItemSize, normalizeSize])\n\n // 获取 header 尺寸(支持动态测量)\n const getHeaderSize = React.useCallback((sectionIndex: number) => {\n if (props.useResizeObserver === true) {\n const cached = headerSizeCacheRef.current.get(sectionIndex)\n if (cached != null && cached > 0) return cached\n }\n return getDefaultHeaderSize()\n }, [props.useResizeObserver, getDefaultHeaderSize])\n\n const getItemSize = React.useCallback((index: number) => {\n if (props.useResizeObserver === true) {\n return sizeCache.getItemSize(index)\n }\n return resolveItemSizeByIndex(index, defaultItemSize)\n }, [props.useResizeObserver, sizeCache, resolveItemSizeByIndex, defaultItemSize])\n\n // 分组累积高度/宽度,sizeCacheVersion 变化时重算\n const sectionOffsets = React.useMemo(() => {\n const offsets: number[] = [0]\n let globalItemIndex = 0\n\n sections.forEach((section, sectionIdx) => {\n const headerSize = getHeaderSize(sectionIdx)\n const itemSizes = section.items.map((_, localIdx) => getItemSize(globalItemIndex + localIdx))\n const groupSize = (section.header ? headerSize : 0) +\n itemSizes.reduce((a, b) => a + b, 0) +\n Math.max(0, section.items.length) * space\n offsets.push(offsets[offsets.length - 1] + groupSize)\n globalItemIndex += section.items.length\n })\n return offsets\n }, [sections, space, getItemSize, getHeaderSize, sizeCacheVersion])\n\n // 外层虚拟滚动:可见分组\n const [startSection, endSection] = React.useMemo(() => {\n let start = 0; let end = sections.length - 1\n for (let i = 0; i < sections.length; i++) {\n if (sectionOffsets[i + 1] > renderOffset) {\n start = Math.max(0, i - cacheCount)\n break\n }\n }\n for (let i = start; i < sections.length; i++) {\n if (sectionOffsets[i] >= renderOffset + containerLength) {\n end = Math.min(sections.length - 1, i + cacheCount)\n break\n }\n }\n return [start, end]\n }, [renderOffset, containerLength, sectionOffsets, sections.length, cacheCount])\n\n // 视口内可见 item 的全局索引范围(供 onScrollIndex)\n const [visibleStartItem, visibleEndItem] = React.useMemo(() => {\n const viewportTop = renderOffset\n const viewportBottom = renderOffset + containerLength\n let firstVisible = -1\n let lastVisible = -1\n let globalIndex = 0\n\n for (let s = 0; s < sections.length; s++) {\n const section = sections[s]\n const headerSize = getHeaderSize(s)\n const sectionStart = sectionOffsets[s] + (section.header ? headerSize : 0)\n let itemTop = sectionStart\n\n for (let i = 0; i < section.items.length; i++) {\n const itemSize = getItemSize(globalIndex)\n const itemBottom = itemTop + itemSize\n // 判断 item 本身(不含 space)是否与视口相交\n if (itemBottom > viewportTop && itemTop < viewportBottom) {\n if (firstVisible < 0) firstVisible = globalIndex\n lastVisible = globalIndex\n }\n // 下一个 item 的起始位置 = 当前 item 结束 + space\n itemTop = itemBottom + space\n globalIndex++\n }\n }\n\n if (firstVisible < 0 || lastVisible < 0) return [0, 0]\n return [firstVisible, lastVisible]\n }, [renderOffset, containerLength, sections, sectionOffsets, getHeaderSize, getItemSize, space])\n\n const lastVisibleRangeRef = React.useRef({ start: -1, end: -1 })\n React.useEffect(() => {\n if (props.onScrollIndex) {\n if (lastVisibleRangeRef.current.start !== visibleStartItem ||\n lastVisibleRangeRef.current.end !== visibleEndItem) {\n lastVisibleRangeRef.current = { start: visibleStartItem, end: visibleEndItem }\n props.onScrollIndex(visibleStartItem, visibleEndItem)\n }\n }\n }, [visibleStartItem, visibleEndItem, props.onScrollIndex])\n\n const handleScroll = React.useCallback((e: any) => {\n let newOffset: number\n if (e.detail) {\n newOffset = isHorizontal ? e.detail.scrollLeft : e.detail.scrollTop\n } else {\n newOffset = isHorizontal ? e.scrollLeft : e.scrollTop\n }\n\n const effectiveOffset = newOffset\n const currentThreshold = thresholdRef.current\n const { upper, lower } = currentThreshold\n const currentContainerLength = containerRef.current\n ? (isHorizontal ? containerRef.current.clientWidth : containerRef.current.clientHeight)\n : containerLength\n const nowInUpper = effectiveOffset <= upper\n const currentContentLength = listContentLengthRef.current\n const nowInLower = currentContentLength > 0 && effectiveOffset + currentContainerLength >= currentContentLength - lower\n const diff = effectiveOffset - lastScrollTopRef.current\n scrollDiffListRef.current.shift()\n scrollDiffListRef.current.push(diff)\n const shaking = isScrollingRef.current && isShaking(scrollDiffListRef.current)\n if (shaking) return\n\n if (programmaticCooldownRef.current) {\n lastScrollTopRef.current = effectiveOffset\n setRenderOffset(effectiveOffset)\n const scrollTop = isHorizontal ? 0 : newOffset\n const scrollLeft = isHorizontal ? newOffset : 0\n onScroll?.({ scrollTop, scrollLeft, detail: { scrollTop, scrollLeft } })\n if (nowInUpper && !inUpperZoneRef.current) onScrollToUpperRef.current?.()\n if (nowInLower && !inLowerZoneRef.current) onScrollToLowerRef.current?.()\n inUpperZoneRef.current = nowInUpper\n inLowerZoneRef.current = nowInLower\n return\n }\n\n scrollCorrection.markUserScrolling()\n updateRenderOffset(effectiveOffset, false, 'onScroll')\n\n const scrollTop = isHorizontal ? 0 : newOffset\n const scrollLeft = isHorizontal ? newOffset : 0\n onScroll?.({ scrollTop, scrollLeft, detail: { scrollTop, scrollLeft } })\n if (nowInUpper && !inUpperZoneRef.current) onScrollToUpperRef.current?.()\n if (nowInLower && !inLowerZoneRef.current) onScrollToLowerRef.current?.()\n inUpperZoneRef.current = nowInUpper\n inLowerZoneRef.current = nowInLower\n }, [isHorizontal, onScroll, updateRenderOffset, scrollCorrection, props.useResizeObserver, containerLength])\n\n // 小程序:onScrollEnd 优先结束 isUserScrolling,timeout 兜底\n const handleNativeScrollEnd = React.useCallback(() => {\n if (isWeapp) {\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current)\n scrollTimeoutRef.current = null\n }\n if (isUserScrollingRef.current) {\n isScrollingRef.current = false\n isUserScrollingRef.current = false\n setIsUserScrolling(false)\n }\n }\n onScrollEnd?.()\n }, [isWeapp, onScrollEnd])\n\n // 暴露 scrollRef 给父组件,供内层 List/WaterFlow 传入 scrollElement\n React.useLayoutEffect(() => {\n if (!scrollRefProp) return\n const el = useScrollElementMode ? effectiveScrollElement?.current : containerRef.current\n if (el) {\n scrollRefProp.current = el\n }\n }, [scrollRefProp, useScrollElementMode, effectiveScrollElement])\n\n // controlledScrollTop 变化时同步到 ScrollView\n React.useEffect(() => {\n if (typeof controlledScrollTop === 'number') {\n const sv = scrollViewOffsetRef.current\n const same = isWeapp && Math.abs(sv - controlledScrollTop) < 1\n if (same) {\n const intermediate = controlledScrollTop > 0 ? controlledScrollTop - 0.01 : 0.01\n setRenderOffset(intermediate)\n setScrollViewOffset(intermediate)\n requestAnimationFrame(() => {\n setRenderOffset(controlledScrollTop)\n setScrollViewOffset(controlledScrollTop)\n })\n } else {\n setRenderOffset(controlledScrollTop)\n setScrollViewOffset(controlledScrollTop)\n }\n lastScrollTopRef.current = controlledScrollTop\n programmaticScrollRef.current = true\n }\n }, [controlledScrollTop])\n\n // 清理定时器、ResizeObserver 与尺寸缓存 RAF(仅在卸载时执行)\n React.useEffect(() => {\n return () => {\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current)\n }\n // 小程序端冷却期定时器清理\n if (isWeapp && programmaticCooldownTimerRef.current) {\n clearTimeout(programmaticCooldownTimerRef.current)\n }\n if (sizeCacheRafRef.current != null) {\n cancelAnimationFrame(sizeCacheRafRef.current)\n sizeCacheRafRef.current = null\n }\n resizeObserver.disconnect()\n scrollCorrection.clearQueue()\n }\n }, [])\n\n // scrollIntoView:仅当 scrollIntoView 变化时执行一次跳动,统一转换为 scrollTop 路径(updateRenderOffset)。\n const lastScrollIntoViewRef = React.useRef<string | null>(null)\n React.useEffect(() => {\n const targetId = props.scrollIntoView\n if (!targetId) {\n lastScrollIntoViewRef.current = null\n return\n }\n if (lastScrollIntoViewRef.current === targetId) return\n lastScrollIntoViewRef.current = targetId\n\n let targetIndex = -1\n if (targetId.startsWith('list-item-')) {\n targetIndex = parseInt(targetId.replace('list-item-', ''), 10)\n }\n\n if (targetIndex >= 0 && targetIndex < totalItemCount) {\n let targetOffset = 0\n let currentGlobalIndex = 0\n for (let s = 0; s < sections.length; s++) {\n const section = sections[s]\n const headerSize = section.header ? getHeaderSize(s) : 0\n if (currentGlobalIndex + section.items.length > targetIndex) {\n targetOffset += headerSize\n for (let i = 0; i < targetIndex - currentGlobalIndex; i++) {\n targetOffset += getItemSize(currentGlobalIndex + i) + space\n }\n break\n } else {\n targetOffset += headerSize\n for (let i = 0; i < section.items.length; i++) {\n targetOffset += getItemSize(currentGlobalIndex + i) + space\n }\n currentGlobalIndex += section.items.length\n }\n }\n const el = effectiveScrollElement?.current\n if (useScrollElementMode && el) {\n const scrollTarget = targetOffset + (isWeapp ? effectiveStartOffsetRef.current : effectiveStartOffset)\n if (isH5) {\n if (isHorizontal) {\n el.scrollTo({ left: scrollTarget })\n } else {\n el.scrollTo({ top: scrollTarget })\n }\n updateRenderOffset(targetOffset, true, 'scrollIntoView')\n } else if (isWeapp) {\n const scrollViewId = (el as any).id || `_ls_${listId}`\n if (!(el as any).id) (el as any).id = scrollViewId\n getScrollViewContextNode(`#${scrollViewId}`).then((node: any) => {\n if (isHorizontal) {\n node?.scrollTo?.({ left: scrollTarget, animated: false })\n } else {\n node?.scrollTo?.({ top: scrollTarget, animated: false })\n }\n updateRenderOffset(targetOffset, true, 'scrollIntoView')\n })\n } else {\n updateRenderOffset(targetOffset, true, 'scrollIntoView')\n }\n } else {\n updateRenderOffset(targetOffset, true, 'scrollIntoView')\n }\n }\n }, [props.scrollIntoView, totalItemCount, sections, getHeaderSize, getItemSize, space, updateRenderOffset, useScrollElementMode, effectiveScrollElement, effectiveStartOffset, effectiveStartOffsetRef, isH5, isWeapp, isHorizontal, listId])\n\n // 容器样式;H5 刷新中禁止滚动\n const containerStyle: React.CSSProperties = {\n position: 'relative',\n boxSizing: 'border-box',\n height,\n width,\n ...style,\n ...(isH5 && refresherConfig && !supportsNativeRefresher && h5RefresherProps.isRefreshing\n ? { overflow: 'hidden' as const }\n : {}),\n }\n\n // ScrollView 属性\n const scrollViewProps: Record<string, unknown> = {\n scrollY: !scrollX && scrollY,\n scrollX,\n style: containerStyle,\n className,\n enhanced: true,\n showScrollbar,\n upperThreshold,\n lowerThreshold,\n scrollWithAnimation: false,\n onScroll: handleScroll,\n onScrollStart,\n onScrollEnd: handleNativeScrollEnd,\n enableBackToTop,\n // 小程序端:开启滚动锚定,防止虚拟列表子节点通过 setData 更新时原生 scroll-view 重置滚动位置\n ...(isWeapp ? { scrollAnchoring: true } : {}),\n ...(typeof cacheExtent === 'number' ? { cacheExtent } : {}),\n\n ...scrollViewRefresherProps,\n ...scrollViewRefresherHandlers,\n }\n\n // H5 对齐小程序:refresherTriggered=true 时顶部立即显示加载指示器,滚到顶部并锁定滚动直至设为 false\n React.useEffect(() => {\n if (!isH5 || !refresherConfig || supportsNativeRefresher || !h5RefresherProps.isRefreshing) return\n updateRenderOffset(0, true, 'refresher')\n }, [h5RefresherProps.isRefreshing, isH5, refresherConfig, supportsNativeRefresher, updateRenderOffset])\n\n // H5 下拉刷新:ref 存 addImperativeTouchListeners,避免 config 变化导致 effect 循环\n React.useLayoutEffect(() => {\n const attach = addImperativeTouchListenersRef.current\n if (!attach) return\n let teardown: (() => void) | null = null\n const tryAttach = () => {\n const el = useScrollElementMode ? effectiveScrollElement?.current : containerRef.current\n if (el && !refresherTeardownRef.current) {\n teardown = attach(el)\n refresherTeardownRef.current = teardown\n }\n }\n tryAttach()\n const rafId = requestAnimationFrame(tryAttach)\n return () => {\n cancelAnimationFrame(rafId)\n if (teardown) {\n teardown()\n }\n refresherTeardownRef.current = null\n }\n }, [useScrollElementMode, effectiveScrollElement])\n\n scrollViewOffsetRef.current = scrollViewOffset\n // scrollTop:weapp 传 scrollViewOffset(reflow 帧传 eff 防跳变);H5 仅非用户滑动时传\n if (isWeapp) {\n if (measureScrollProtectRef.current) {\n measureScrollProtectRef.current = false\n const eff = lastScrollTopRef.current\n setScrollViewOffset(eff)\n if (isHorizontal) {\n scrollViewProps.scrollLeft = eff\n } else {\n scrollViewProps.scrollTop = eff\n }\n programmaticScrollRef.current = false\n } else {\n const sv = scrollViewOffset\n if (isHorizontal) {\n scrollViewProps.scrollLeft = sv\n } else {\n scrollViewProps.scrollTop = sv\n }\n programmaticScrollRef.current = false\n }\n } else {\n // H5:非用户滑动时传\n if (!isUserScrolling) {\n if (isHorizontal) {\n scrollViewProps.scrollLeft = scrollViewOffset\n } else {\n scrollViewProps.scrollTop = scrollViewOffset\n }\n }\n }\n\n // H5:程序性滚动时写回 DOM scrollTop\n React.useEffect(() => {\n if (!isH5) return\n if (isUserScrolling || !containerRef.current || typeof scrollViewOffset !== 'number') return\n if (!programmaticScrollRef.current) return\n const scrollValue = scrollViewOffset\n if (isHorizontal) {\n containerRef.current.scrollLeft = scrollValue\n } else {\n containerRef.current.scrollTop = scrollValue\n }\n programmaticScrollRef.current = false\n }, [isH5, scrollViewOffset, isHorizontal, isUserScrolling])\n\n // 总高度/宽度(含 NoMore)\n const noMoreHeight = noMoreConfig?.visible ? (noMoreConfig.height || 60) : 0\n const listContentLength = sectionOffsets[sectionOffsets.length - 1] + noMoreHeight\n const totalLength = listContentLength\n\n // scrollElement 模式下 onScrollToLower 需用内层内容高度判断,供 scroll handler 读取\n listContentLengthRef.current = listContentLength\n\n const scrollAttachRefsRef = React.useRef<ListScrollElementAttachRefs | null>(null)\n scrollAttachRefsRef.current = {\n scrollCorrection: scrollCorrectionRef.current,\n onScroll: onScrollRef.current,\n onScrollToUpper: onScrollToUpperRef.current,\n onScrollToLower: onScrollToLowerRef.current,\n threshold: thresholdRef.current,\n listContentLength: listContentLengthRef.current,\n }\n useListScrollElementAttach(\n useScrollElementMode && isH5,\n effectiveScrollElement,\n effectiveStartOffset,\n isHorizontal,\n setContainerLength,\n updateRenderOffset,\n scrollRefProp,\n scrollAttachRefsRef\n )\n useListScrollElementAttachWeapp(\n useScrollElementMode && isWeapp,\n effectiveScrollElement,\n effectiveStartOffsetRef,\n effectiveStartOffset,\n isHorizontal,\n setContainerLength,\n updateRenderOffset,\n scrollRefProp,\n scrollAttachRefsRef,\n initialContainerLength // 兜底:measure 未完成或失败时供 onScrollToUpper/Lower 及 containerLengthRef 使用\n )\n\n // 吸顶/吸左 header\n const stickyHeaderNode = React.useMemo(() => {\n if (!stickyHeader) return null\n for (let i = 0; i < sections.length; i++) {\n if (sectionOffsets[i] <= renderOffset && renderOffset < sectionOffsets[i + 1]) {\n const section = sections[i]\n if (section.header) {\n // 吸顶 header 不设固定 height/width,由内容撑开,避免「外部 60px 容器 + 实际内容 40+px」导致 header 内空白\n const stickyHeaderStyle: React.CSSProperties = {\n position: 'sticky',\n top: 0,\n left: 0,\n zIndex: 100,\n background: '#fff',\n boxSizing: 'border-box',\n minHeight: 20,\n overflow: 'hidden',\n lineHeight: 1\n }\n return (\n <View style={stickyHeaderStyle}>\n {section.header}\n </View>\n )\n }\n }\n }\n return null\n }, [stickyHeader, renderOffset, sectionOffsets, sections])\n\n // 渲染分组+item双层虚拟滚动\n const renderSections = () => {\n const nodes: React.ReactNode[] = []\n let offset = sectionOffsets[startSection]\n let globalItemIndex = 0 // 全局 item 索引(跨 section)\n\n // 计算起始 section 之前的所有 item 数量\n for (let s = 0; s < startSection; s++) {\n globalItemIndex += sections[s].items.length\n }\n\n for (let s = startSection; s <= endSection; s++) {\n const section = sections[s]\n const headerSize = getHeaderSize(s)\n const itemSizes = section.items.map((_, i) => getItemSize(globalItemIndex + i))\n // header\n if (section.header) {\n const sectionIndex = s\n // 动态测量时外层定位容器不设固定高度,由内层撑开\n const sectionHeaderStyle: React.CSSProperties = {\n position: 'absolute',\n zIndex: 2,\n boxSizing: 'border-box',\n width: '100%',\n minHeight: '20px',\n overflow: 'hidden',\n lineHeight: 1,\n ...(isHorizontal\n ? { top: 0, height: '100%', left: offset, width: props.useResizeObserver ? undefined : headerSize }\n : { top: offset, height: props.useResizeObserver ? undefined : headerSize })\n }\n\n // header ref 回调(用于 ResizeObserver 测量)\n const headerRefCallback = props.useResizeObserver ? (el: HTMLElement | null) => {\n if (el) {\n headerRefsRef.current.set(sectionIndex, el)\n resizeObserver.observe(el, -sectionIndex - 1) // 用负数索引区分 header 和 item\n const measureAndUpdateHeader = (measured: number) => {\n if (measured > 0) {\n const oldSize = headerSizeCacheRef.current.get(sectionIndex) ?? getDefaultHeaderSize()\n if (Math.abs(oldSize - measured) >= 1) {\n headerSizeCacheRef.current.set(sectionIndex, measured)\n if (isWeapp && props.useResizeObserver === true) {\n scheduleWeappDynamicReflow()\n } else if (sizeCacheRafRef.current == null) {\n sizeCacheRafRef.current = requestAnimationFrame(() => {\n sizeCacheRafRef.current = null\n setSizeCacheVersion((v) => v + 1)\n })\n }\n }\n }\n }\n if (isH5) {\n requestAnimationFrame(() => {\n if (!headerRefsRef.current.has(sectionIndex)) return\n const rect = el.getBoundingClientRect()\n measureAndUpdateHeader(isHorizontal ? rect.width : rect.height)\n })\n } else if (isWeapp) {\n Taro.nextTick(() => {\n if (!headerRefsRef.current.has(sectionIndex)) return\n Taro.createSelectorQuery()\n .select(`#${listId}-list-header-inner-${sectionIndex}`)\n .boundingClientRect((rect: any) => {\n if (rect) {\n measureAndUpdateHeader(isHorizontal ? rect.width : rect.height)\n }\n })\n .exec()\n })\n }\n } else {\n const oldEl = headerRefsRef.current.get(sectionIndex)\n if (oldEl) {\n resizeObserver.unobserve(oldEl)\n headerRefsRef.current.delete(sectionIndex)\n }\n }\n } : undefined\n\n // 动态尺寸时:外层定位,内层撑开以便测量\n const headerContentStyle: React.CSSProperties = props.useResizeObserver\n ? (\n isHorizontal\n // weapp 下 max-content 兼容性不稳定,改用 inline-flex 收缩包裹以测得真实宽度\n ? (isWeapp\n ? { boxSizing: 'border-box', display: 'inline-flex', height: '100%' }\n : { boxSizing: 'border-box', width: 'max-content', height: '100%' })\n : { boxSizing: 'border-box', width: '100%' }\n )\n : {}\n\n if (props.useResizeObserver) {\n const headerInnerProps: any = {\n ref: headerRefCallback,\n style: headerContentStyle,\n 'data-index': String(-sectionIndex - 1), // 用于 unobserve 获取 index;与 observe(el, -sectionIndex-1) 对应\n }\n if (isWeapp) {\n headerInnerProps.id = `${listId}-list-header-inner-${sectionIndex}`\n }\n nodes.push(\n React.createElement(View, {\n key: section.key + '-header',\n style: sectionHeaderStyle,\n }, React.createElement(View, headerInnerProps, section.header))\n )\n } else {\n nodes.push(\n React.createElement(View, {\n key: section.key + '-header',\n style: sectionHeaderStyle,\n }, section.header)\n )\n }\n offset += headerSize\n }\n // item offsets\n const itemOffsets = accumulate(itemSizes.map((size) => size + space))\n // 内层虚拟滚动:可见item区间\n let startItem = 0; let endItem = section.items.length - 1\n for (let i = 0; i < section.items.length; i++) {\n if (offset + itemOffsets[i + 1] > renderOffset) {\n startItem = Math.max(0, i - cacheCount)\n break\n }\n }\n for (let i = startItem; i < section.items.length; i++) {\n if (offset + itemOffsets[i] >= renderOffset + containerLength) {\n endItem = Math.min(section.items.length - 1, i + cacheCount)\n break\n }\n }\n\n // 更新可见起始索引(用于 ScrollCorrection)\n if (s === startSection && startItem === 0) {\n visibleStartIndexRef.current = globalItemIndex\n } else if (s === startSection) {\n visibleStartIndexRef.current = globalItemIndex + startItem\n }\n\n // 渲染可见item\n for (let i = startItem; i <= endItem; i++) {\n const currentGlobalIndex = globalItemIndex + i\n const itemId = `list-item-${currentGlobalIndex}`\n\n const sectionItemStyle: React.CSSProperties = {\n position: 'absolute',\n zIndex: 1,\n boxSizing: 'border-box',\n width: '100%',\n minHeight: '20px',\n overflow: 'hidden',\n lineHeight: 1,\n ...(isHorizontal\n ? {\n top: 0,\n height: '100%',\n left: offset + itemOffsets[i],\n width: itemSizes[i],\n marginRight: space\n }\n : {\n top: offset + itemOffsets[i],\n height: itemSizes[i],\n marginBottom: space\n })\n }\n\n // ResizeObserver:绑定内层内容容器测量真实尺寸,尺寸变化时才 bump 版本\n const refCallback = (el: HTMLElement | null) => {\n if (el) {\n const capturedIndex = currentGlobalIndex\n itemRefsRef.current.set(capturedIndex, el)\n resizeObserver.observe(el, capturedIndex)\n\n // H5:使用 getBoundingClientRect 进行 fallback 测量\n // 小程序:使用 SelectorQuery 进行 fallback 测量(小程序没有 getBoundingClientRect)\n const measureAndUpdate = (measured: number) => {\n if (measured > 0) {\n const oldSize = sizeCache.getItemSize(capturedIndex)\n if (Math.abs(oldSize - measured) < 1) return\n sizeCache.setItemSize(capturedIndex, measured)\n scrollCorrection.recordSizeChange(capturedIndex, oldSize, measured)\n if (isWeapp && props.useResizeObserver === true) {\n scheduleWeappDynamicReflow()\n } else if (sizeCacheRafRef.current == null) {\n sizeCacheRafRef.current = requestAnimationFrame(() => {\n sizeCacheRafRef.current = null\n setSizeCacheVersion((v) => v + 1)\n })\n }\n // 小程序:延迟 onItemSizeChange,避免父组件重渲染导致 List remount\n if (isWeapp) {\n weappDeferItemSizeChange(capturedIndex, measured, props.onItemSizeChange)\n } else {\n props.onItemSizeChange?.(capturedIndex, measured)\n }\n }\n }\n\n if (isH5) {\n requestAnimationFrame(() => {\n if (!itemRefsRef.current.has(capturedIndex)) return\n const rect = el.getBoundingClientRect()\n measureAndUpdate(isHorizontal ? rect.width : rect.height)\n })\n } else if (isWeapp) {\n // 小程序端:使用 SelectorQuery 测量内层内容容器的实际尺寸\n // 注意:必须选 inner 容器(无固定高度,由内容撑开),不能选 outer(有虚拟列表设置的固定高度)\n // 已测量过的 item 跳过,避免 refCallback 重复触发导致无限循环\n // 滚动期间跳过 SelectorQuery(不加入 weappMeasuredItemsRef),避免异步查询干扰 scroll-view\n // SelectorQuery 是只读查询,滚动期间执行安全\n if (shouldMeasureWeappItem(capturedIndex, weappMeasuredItemsRef.current)) {\n weappMeasuredItemsRef.current.add(capturedIndex)\n // 使用 Taro.nextTick 代替 setTimeout(50):等待下一帧渲染完成后再测量\n // 比固定延时更快(减少\"预估→实测\"闪烁)且更可靠(保证 DOM 已更新)\n Taro.nextTick(() => {\n if (!itemRefsRef.current.has(capturedIndex)) return\n Taro.createSelectorQuery()\n // 页面上可能同时存在多个 List,inner id 必须带 listId 前缀避免跨列表误命中\n .select(`#${listId}-list-item-inner-${capturedIndex}`)\n .boundingClientRect((rect: any) => {\n if (rect) {\n measureAndUpdate(isHorizontal ? rect.width : rect.height)\n }\n })\n .exec()\n })\n }\n }\n } else {\n const oldEl = itemRefsRef.current.get(currentGlobalIndex)\n if (oldEl) {\n resizeObserver.unobserve(oldEl)\n itemRefsRef.current.delete(currentGlobalIndex)\n }\n }\n }\n\n // 动态尺寸时:外层负责定位,内层由内容撑开以便测量真实尺寸。\n // 纵向:内层 width:100% 无 height,由内容撑开,测到的是内容高度。\n // 横向:width:max-content + height:100%:\n // - width:max-content 便于测量真实宽度;\n // - height:100% 让测量层与外层 slot 条带高度一致,避免「外层条带 180px、内层 wrapper 只有内容高度」导致的内外高度差。\n const contentWrapperStyle: React.CSSProperties = props.useResizeObserver\n ? (\n isHorizontal\n // weapp 下 max-content 兼容性不稳定,改用 inline-flex 收缩包裹以测得真实宽度\n ? (isWeapp\n ? { boxSizing: 'border-box', display: 'inline-flex', height: '100%' }\n : { boxSizing: 'border-box', width: 'max-content', height: '100%' })\n : { boxSizing: 'border-box', width: '100%' }\n )\n : {}\n\n const outerItemProps: any = {\n key: section.key + '-item-' + i,\n id: itemId,\n style: sectionItemStyle,\n }\n\n if (props.useResizeObserver) {\n const innerProps: any = {\n ref: refCallback,\n style: contentWrapperStyle,\n }\n // 小程序端需要 id 用于 SelectorQuery 测量内容真实尺寸;H5 端不需要(用 getBoundingClientRect)\n if (isWeapp) {\n // 页面内多 List 并存时避免 id 冲突(例如 demo 同页含多个 List)\n innerProps.id = `${listId}-list-item-inner-${currentGlobalIndex}`\n }\n innerProps['data-index'] = String(currentGlobalIndex)\n const itemNode = React.createElement(View, outerItemProps, React.createElement(View, innerProps, section.items[i]))\n // 任务 4.1:当 List 暴露 scrollRef 时,为每个 item 提供 Context,供内层 WaterFlow 使用\n const itemWithContext = scrollRefProp && !useScrollElementMode\n ? React.createElement(ScrollElementContextOrFallback.Provider, {\n key: outerItemProps.key,\n value: {\n scrollRef: scrollRefProp,\n containerHeight: containerLength,\n startOffset: offset + itemOffsets[i],\n reportNestedHeightChange: props.useResizeObserver\n ? (h: number) => handleReportNestedHeightChange(h, currentGlobalIndex)\n : undefined,\n },\n }, itemNode)\n : itemNode\n nodes.push(itemWithContext)\n } else {\n const itemNode = React.createElement(View, outerItemProps, section.items[i])\n const itemWithContext = scrollRefProp && !useScrollElementMode\n ? React.createElement(ScrollElementContextOrFallback.Provider, {\n key: outerItemProps.key,\n value: {\n scrollRef: scrollRefProp,\n containerHeight: containerLength,\n startOffset: offset + itemOffsets[i],\n reportNestedHeightChange: props.useResizeObserver\n ? (h: number) => handleReportNestedHeightChange(h, currentGlobalIndex)\n : undefined,\n },\n }, itemNode)\n : itemNode\n nodes.push(itemWithContext)\n }\n }\n\n globalItemIndex += section.items.length\n offset += itemOffsets[itemOffsets.length - 1]\n }\n\n return nodes\n }\n\n // 渲染 NoMore 内容\n const renderNoMoreContent = () => {\n if (!noMoreConfig || !noMoreConfig.visible) return null\n\n const noMoreHeightValue = noMoreConfig.height || 60\n const listContentEnd = sectionOffsets[sectionOffsets.length - 1]\n\n const defaultStyle: React.CSSProperties = {\n position: 'absolute',\n ...(isHorizontal\n ? { left: listContentEnd, top: 0, width: noMoreHeightValue, height: '100%' }\n : { top: listContentEnd, left: 0, width: '100%', height: noMoreHeightValue }\n ),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n color: '#999',\n fontSize: '14px',\n boxSizing: 'border-box',\n ...noMoreConfig.style\n }\n\n return (\n <View style={defaultStyle}>\n {noMoreConfig.children || noMoreConfig.text || '没有更多了'}\n </View>\n )\n }\n\n // 空列表场景:仅显示 NoMore\n if (sections.length === 0 && noMoreConfig?.visible) {\n return (\n <ScrollView ref={containerRef as any} {...scrollViewProps}>\n <View style={{\n minHeight: containerLength,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...containerStyle\n }}>\n {renderNoMoreContent()}\n </View>\n </ScrollView>\n )\n }\n\n // 可滚区域总尺寸\n // H5 refresher 用负 translateY 隐藏,有上方混排时可能延伸到 sibling 区域;overflow:hidden 裁剪避免重叠\n const needsRefresherClip = refresherHeightForH5 > 0\n const contentWrapperStyle: React.CSSProperties = isHorizontal\n ? { width: totalLength, position: 'relative', height: '100%', ...(needsRefresherClip && { overflow: 'hidden' }) }\n : { height: totalLength, position: 'relative', width: '100%', ...(needsRefresherClip && { overflow: 'hidden' }) }\n const listWrapperStyle: React.CSSProperties = isHorizontal\n ? { width: listContentLength, position: 'relative' as const, height: '100%' }\n : { height: listContentLength, position: 'relative' as const, width: '100%' }\n const pullTranslate: React.CSSProperties =\n refresherHeightForH5 > 0 && h5RefresherProps.pullDistance !== 0\n ? { transform: `translateY(${h5RefresherProps.pullDistance}px)` }\n : {}\n const h5RefresherTranslateY = -refresherHeightForH5 + h5RefresherProps.pullDistance\n\n // 内容区域渲染\n const renderContentArea = () => (\n <View style={contentWrapperStyle}>\n {refresherHeightForH5 > 0 ? (\n <>\n {/* H5 刷新层默认上移隐藏;下拉时按 pullDistance 同步露出 */}\n <View\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: refresherHeightForH5,\n zIndex: 0,\n transform: `translateY(${h5RefresherTranslateY}px)`,\n }}\n >\n {renderRefresherContent()}\n </View>\n {/* 列表在上方:zIndex 高盖住刷新层,下拉时 translateY 下移露出下面刷新内容 */}\n {/* 需要 background 遮住下方刷新层,因为 renderSections 是 absolute 定位不占流空间 */}\n <View style={{ ...listWrapperStyle, ...pullTranslate, zIndex: 1, background: style?.background ?? style?.backgroundColor ?? '#fff' }}>\n {stickyHeaderNode}\n {renderSections()}\n {renderNoMoreContent()}\n </View>\n </>\n ) : (\n <>\n {!supportsNativeRefresher && renderRefresherContent()}\n {stickyHeaderNode}\n {renderSections()}\n {renderNoMoreContent()}\n </>\n )}\n </View>\n )\n\n // useScrollElementMode 或 needAutoFind&&pending:渲染 View 以便监听外部滚动或 probe 阶段查找滚动父节点\n const renderView = useScrollElementMode || (!!needAutoFind && autoFindStatus === 'pending')\n if (renderView) {\n // 任务 2.4:恢复 refresher DOM 结构(refresher 层 + listWrapperStyle)\n return (\n <View ref={contentWrapperRef as any} id={contentId} style={contentWrapperStyle}>\n {refresherHeightForH5 > 0 ? (\n <>\n <View\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: refresherHeightForH5,\n zIndex: 0,\n transform: `translateY(${h5RefresherTranslateY}px)`,\n }}\n >\n {renderRefresherContent()}\n </View>\n <View style={{ ...listWrapperStyle, ...pullTranslate, zIndex: 1, background: style?.background ?? style?.backgroundColor ?? '#fff' }}>\n {stickyHeaderNode}\n {renderSections()}\n {renderNoMoreContent()}\n </View>\n </>\n ) : (\n <>\n {stickyHeaderNode}\n {renderSections()}\n {renderNoMoreContent()}\n </>\n )}\n </View>\n )\n }\n\n return (\n <ScrollView ref={containerRef as any} {...scrollViewProps} id={listId}>\n {/* 小程序:slot=\"refresher\" 必须是 ScrollView 的直接子元素 */}\n {supportsNativeRefresher && renderRefresherContent()}\n {renderContentArea()}\n </ScrollView>\n )\n}\n\nconst List = React.forwardRef<ListHandle, ListProps>(InnerList)\n\nexport { List, ListItem, NoMore, StickyHeader, StickySection }\n\nexport default List\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tarojs/components-advanced",
3
- "version": "4.1.12-beta.14",
3
+ "version": "4.1.12-beta.16",
4
4
  "description": "",
5
5
  "author": "O2Team",
6
6
  "license": "MIT",
@@ -20,20 +20,20 @@
20
20
  "csstype": "^3.1.1",
21
21
  "memoize-one": "^6.0.0",
22
22
  "tslib": "^2.6.2",
23
- "@tarojs/components": "4.1.12-beta.14",
24
- "@tarojs/components-react": "4.1.12-beta.14"
23
+ "@tarojs/components": "4.1.12-beta.16",
24
+ "@tarojs/components-react": "4.1.12-beta.16"
25
25
  },
26
26
  "devDependencies": {
27
27
  "vue": "3.2.47",
28
- "@tarojs/runtime": "4.1.12-beta.14",
29
- "@tarojs/shared": "4.1.12-beta.14",
30
- "@tarojs/taro": "4.1.12-beta.14"
28
+ "@tarojs/runtime": "4.1.12-beta.16",
29
+ "@tarojs/shared": "4.1.12-beta.16",
30
+ "@tarojs/taro": "4.1.12-beta.16"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "react": ">=18",
34
- "@tarojs/runtime": "~4.1.12-beta.14",
35
- "@tarojs/shared": "~4.1.12-beta.14",
36
- "@tarojs/taro": "~4.1.12-beta.14"
34
+ "@tarojs/shared": "~4.1.12-beta.16",
35
+ "@tarojs/runtime": "~4.1.12-beta.16",
36
+ "@tarojs/taro": "~4.1.12-beta.16"
37
37
  },
38
38
  "peerDependenciesMeta": {
39
39
  "react": {