Skip to content

feat(rn): 支持自定义组件可通过 createSelectorQuery 获取引用对象#2491

Open
dos1in wants to merge 12 commits into
didi:masterfrom
dos1in:feat/add-custom-component-ref
Open

feat(rn): 支持自定义组件可通过 createSelectorQuery 获取引用对象#2491
dos1in wants to merge 12 commits into
didi:masterfrom
dos1in:feat/add-custom-component-ref

Conversation

@dos1in

@dos1in dos1in commented May 14, 2026

Copy link
Copy Markdown
Member

本次改动让 RN SelectorQuery.select 同时查询 node 和 component 类型 ref,并让自定义组件实例暴露其非 virtualHost 场景下的 host 根节点,供现有 NodeRef 测量流程复用。

改动点:

  1. packages/api-proxy/src/platform/api/create-selector-query/rnSelectQuery.js

  • 将 select(selector) 的 ref 查询范围从 node 扩展为 ['node', 'component']。
  • 基础节点仍走原有 node ref,自定义组件可命中 component ref。
  1. packages/core/src/platform/builtInMixins/refsMixin.ios.js

  • __selectRef 支持传入多个 ref type。
  • 扩展 type 过滤条件。
  1. packages/core/src/platform/patch/getDefaultOptions.ios.js

  • 为 RN 自定义组件实例保存内部 host 根节点 ref。
  • 组件 render 出来的 root 节点带 ishost 时,将 hostRef 挂到该节点。
  • 组件实例新增 __getNodeInstance(),把自定义组件转成可被 NodeRef 消费的节点实例。
  1. packages/api-proxy/src/platform/api/create-selector-query/rnNodesRef.js

  • NodeRef 兼容 getNodeInstance 和自定义组件实例上的 __getNodeInstance。

另外更新了测试用例和对应的 skills 说明。

@dos1in dos1in changed the title feat(RN): 支持自定义组件可通过 createSelectorQuery 获取引用对象 feat(rn): 支持自定义组件可通过 createSelectorQuery 获取引用对象 May 20, 2026
@hiyuki

hiyuki commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

这不符合微信本身的规范吧?

@dos1in

dos1in commented Jul 7, 2026

Copy link
Copy Markdown
Member Author

这不符合微信本身的规范吧?

符合微信小程序规范,当前 mpx2rn 方案的 SelectorQuery 方法可以获取到基础组件的引用,但无法获取自定义组件:

createSelectorQuery().select('#container') 
.boundingClientRect((res) => {
 // 正常获取
})
.exec()

createSelectorQuery().select('#custom-comp') 
.boundingClientRect((res) => {
 // 无法获取
})
.exec()

<view id="container">
  <custom-comp id="mycomp" class="my-custom"></custom-comp>
</view>

@hiyuki

hiyuki commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

微信能直接对组件调用createSelectorQuery().select么?

@dos1in

dos1in commented Jul 8, 2026

Copy link
Copy Markdown
Member Author

微信能直接对组件调用createSelectorQuery().select么?

可以对自定义组件进行调用select。

Comment thread packages/api-proxy/src/platform/api/create-selector-query/rnSelectQuery.js Outdated
Comment thread packages/core/src/platform/patch/getDefaultOptions.ios.js Outdated
@hiyuki

hiyuki commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

另外可以考虑输出web也对齐该行为

@dos1in

dos1in commented Jul 8, 2026

Copy link
Copy Markdown
Member Author

另外可以考虑输出web也对齐该行为

已处理。

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