Skip to content

feat(rn): scroll-view 校准 scrollOffset 返回值 & ScrollViewContext node API 支持动态读写属性 - #2436

Open
yandadaFreedom wants to merge 2 commits into
masterfrom
fix-scroll-context-rn
Open

feat(rn): scroll-view 校准 scrollOffset 返回值 & ScrollViewContext node API 支持动态读写属性#2436
yandadaFreedom wants to merge 2 commits into
masterfrom
fix-scroll-context-rn

Conversation

@yandadaFreedom

Copy link
Copy Markdown
Collaborator
  1. 校准 scrollOffset 返回值,补齐 scrollWidth 和 scrollHeight 字段
  2. 实现 ScrollViewContext node 支持动态读写属性

@hiyuki

hiyuki commented Sep 9, 2026

Copy link
Copy Markdown
Collaborator

评审基于提交 a405ca5486b4735f4e208dc65239eeaf192ba28a,发现 3 个 P2 问题,建议修复后合并:

  1. [P2] bounces prop 更新失效L318

    effect 调用了 setScrollBounces,但没有自定义刷新时,原生组件使用的是 bouncesState。开启 enhanced 后,将 bouncestrue 改为 false,原生属性仍为 true。这里应调用 setBouncesState

  2. [P2] 自定义刷新场景下,node.bounces 写入不生效L909

    setter 只更新 bouncesState,但 hasRefresher 分支使用 scrollBounces,手势逻辑也仍读取原始 bounces prop。复现中先通过向上手势开启弹性,再设置 node.bounces = false,重新渲染后 getter 已返回 false,原生属性仍为 true。需要将外部开关与刷新内部状态共同用于控制弹性,并让手势逻辑读取最新外部状态。

  3. [P2] 缓存的方法保留首次渲染的滚动方向L306–307

    context 只初始化一次,handleScrollIntoView 捕获的 scrollX/scrollY 不再更新。从纵向切换到横向后调用 scrollIntoView('#target', { offset: 10 }),偏移仍加到纵轴。例如目标测量位置为 (100, 200) 时,预期滚动到 (110, 200),实际为 (100, 210)。应通过 ref 读取最新方向,或更新 context 上的方法引用。

验证:使用 PR 原文件和 React 测试渲染器复现了以上问题,并确认第 1、3 项在基线版本正常;新增 scrollWidth / scrollHeight 在内容尺寸回调后取值正常。PR 文件 ESLint 通过。原生层使用 mock,未进行真机验证。

另外,本次新增 RN 对外能力尚未按仓库约定同步 docs-vitepress 文档和 .agents/skills/mpx2rn/ 参考资料。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants