Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
168 commits
Select commit Hold shift + click to select a range
bcb2754
chore: 优化 scroll-view
Oct 29, 2025
abebaa2
chore: 优化 scroll-view
Oct 30, 2025
e64dfde
chore: 优化 scroll-view
Oct 30, 2025
37bb2de
fix: 预请求在不存在缓存时不应该触发equels回调
mackwang112 Nov 6, 2025
15e6beb
fix(rn): iOS `input` 未触发 `bindfocus`
wangshunnn Nov 7, 2025
4490a7b
fix: 修复defineOptions使用ObjectMethod语法构建报错
mackwang112 Nov 11, 2025
8d16bfc
style: 移除无用注释
mackwang112 Nov 11, 2025
3db5271
fix(rn): improve focus handling for `mpx-input`
wangshunnn Nov 12, 2025
7b3fe94
fix: 键盘避让对 portal 造成影响
shulandmimi Nov 11, 2025
f553b05
Merge branch 'master' into fix-fatch-usepre-cache
mackwang112 Nov 18, 2025
bfd2ff3
Merge branch 'master' into fix-defineOptions-ObjectMethod-syntax
mackwang112 Nov 18, 2025
617a450
补充parseUrl接收参数兜底空字符串
Nov 18, 2025
780e7c4
Merge branch 'master' into feat-router-lock-addpath
hiyuki Nov 18, 2025
3a7dafb
开发组件报错增加堆栈
Nov 19, 2025
56956d8
fix(rn): 修复 Android 多个输入框切换聚焦时逻辑时序问题
wangshunnn Nov 20, 2025
05bbe25
fix(rn): textarea 开启 `auto-height` 之后 `min-height` 异常问题
wangshunnn Nov 20, 2025
7ea0686
chore: remove console
wangshunnn Nov 20, 2025
d669622
feat: 优化tsconfig,分离webpack-plugin下react和lib tsconfig
shulandmimi Nov 26, 2025
bab5123
fix(rn): 修复切换聚焦输入框意外失焦问题
wangshunnn Nov 27, 2025
3eac3c1
feat: 删除无用文件 & 补充注释
shulandmimi Nov 27, 2025
ef7188c
fix(rn): improve background size normalization
wangshunnn Dec 12, 2025
e51e242
Merge branch 'master' into fix-rn-view-background-size
wangshunnn Dec 12, 2025
1344c20
Merge branch 'master' into fix-rn-view-background-size
hiyuki Dec 23, 2025
e20aa5a
feat: rewrite fs for css
Blackgan3 Dec 23, 2025
c1e6ecc
fix: lint error
Blackgan3 Dec 23, 2025
fa451cf
feat: 修改rewriteFs逻辑
Blackgan3 Dec 24, 2025
b74e6b3
fix(rn): improve `background-position` normalization in mpx-view
wangshunnn Dec 29, 2025
293edc1
Merge branch 'master' into fix/keyboardAvoidingPortal
shulandmimi Jan 5, 2026
f3183db
feat: 支持多种格式注释&支持Mpx文件过滤
Blackgan3 Jan 5, 2026
25a7144
fix: 修正 textarea confirmType 非 return 类型右下角按钮触发事件异常
WX-DongXing Jan 6, 2026
6a7d250
format
wenwenhua Jan 7, 2026
29e0a08
feat: 调整添加init-mpx文件进行初始化工作
Blackgan3 Jan 8, 2026
372cfc4
fix: path error
Blackgan3 Jan 8, 2026
e840b6b
fix: unit test error
Blackgan3 Jan 8, 2026
f70c2ac
fix: 修复红米&魅族手机的底部虚拟按键计算错误的问题
Dec 22, 2025
0d9869e
add md
wenwenhua Jan 12, 2026
197708c
fix: 动态修改height相关配置,重新触发getItemLayout计算
Jan 12, 2026
091dd26
Merge branch 'master' into fix-rn-view-background-size
hiyuki Jan 12, 2026
5743329
Merge pull request #2361 from didi/fix-rn-view-background-size
hiyuki Jan 12, 2026
bfd2cbc
chore: 删除多余的文件
shulandmimi Jan 12, 2026
242b41f
docs: fix multipleSlots option
wangshunnn Jan 13, 2026
d180832
feat: change init-mpx to init
Blackgan3 Jan 13, 2026
d1b48da
Merge branch 'master' into feat-style-compile-251012-ms
wenwenhua Jan 13, 2026
1391067
feat(rn): 添加 canIUse api 相关实现
dos1in Jan 13, 2026
b4482f2
Merge branch 'didi:master' into master
dos1in Jan 13, 2026
c8e0499
docs: add tips about enable-xxx in mpx-view
wangshunnn Jan 13, 2026
22ff6c4
Merge pull request #2396 from didi/fix-docs-20260113
hiyuki Jan 13, 2026
24476d2
feat: 用静态配置替代动态导入,避免加载原生模块
dos1in Jan 13, 2026
4ad6b44
Merge branch 'master' into feat-css-if-strip-override-fs
hiyuki Jan 13, 2026
a45d8b5
Merge pull request #2369 from didi/feat-css-if-strip-override-fs
hiyuki Jan 13, 2026
f2ee8bb
feat(rn): 添加 getMenuButtonBoundingClientRect 实现
dos1in Jan 13, 2026
edb6955
fix: lint fix
dos1in Jan 13, 2026
76295bd
Merge branch 'master' into master
dos1in Jan 13, 2026
4940847
Merge branch 'master' into feat/rn-get-react
dos1in Jan 13, 2026
f277ef3
Merge branch 'master' into feat-router-lock-addpath
hiyuki Jan 13, 2026
bff2c4a
Merge pull request #2333 from didi/feat-router-lock-addpath
hiyuki Jan 13, 2026
338d27d
Merge branch 'master' into fix/keyboardAvoidingPortal
hiyuki Jan 13, 2026
2b4b7dc
Merge pull request #2323 from didi/fix/keyboardAvoidingPortal
hiyuki Jan 13, 2026
796ea3d
去掉无用的改动
Jan 13, 2026
f0fd1a8
Merge branch 'master' into feat-component-error-add-stack
Jan 13, 2026
5be94f9
修改error报错增加stack的逻辑
Jan 13, 2026
ead84d3
修复安卓部分机型拿到的absolute值不对的问题
Jan 14, 2026
20b56ed
fix: repaire confirm-hold
WX-DongXing Jan 14, 2026
8b59b48
Merge branch 'master' into master
dos1in Jan 15, 2026
6f846e1
Merge branch 'master' into feat/rn-get-react
dos1in Jan 15, 2026
5f36fc6
feat: strip condiational 添加错误抛出
Blackgan3 Jan 15, 2026
87c50a2
fix: sectionList 重新渲染导致list-item、list-header 等组件 销毁并重新创建;
Jan 15, 2026
43f9534
feat: swiper support display-multiple-items
Blackgan3 Jan 15, 2026
df4c954
Revert "feat: swiper support display-multiple-items"
Blackgan3 Jan 15, 2026
d73f18d
fix cr
wenwenhua Jan 16, 2026
5b5d2d2
Merge pull request #2404 from didi/feat-sticky-ali-v2-cr
yandadaFreedom Jan 19, 2026
32fa82f
Merge branch 'master' into master
dos1in Jan 19, 2026
14e2d06
Merge branch 'master' into feat/rn-get-react
dos1in Jan 19, 2026
14c8216
fix(rn): 修复 css var fallback 校验导致变量失效
Jan 19, 2026
86114c2
fix(rn): 恢复 verifyValues 为布尔校验
Jan 19, 2026
7b488a9
Merge pull request #2405 from didi/feat-sticky-ali-v2
Blackgan3 Jan 19, 2026
646a4cf
v@mpxjs/webpack-plugin@2.10.17-beta.9
Blackgan3 Jan 19, 2026
8f8c473
fix(rn): 兜底将裸字符串样式值序列化为字面量
Jan 20, 2026
0bdfaca
Revert "fix(rn): 兜底将裸字符串样式值序列化为字面量"
Jan 20, 2026
8a6102b
fix(rn): handle css var fallback and string literals
Jan 21, 2026
e7080d6
fix: 修改底部区域计算逻辑
Jan 21, 2026
2e540b6
little optimize for loading-on-demand
hiyuki Jan 21, 2026
b34f47d
fix: 删除入参
Jan 21, 2026
50c623d
Merge branch 'master' into fix/rn-fontfamily-unquoted
zifengjiang Jan 21, 2026
8cfd6ea
更新文档
Jan 21, 2026
300a5e8
fix(rn): drop non-standard css var fallback handling
Jan 21, 2026
f253ad3
fix(rn): simplify css var resolution flow
Jan 21, 2026
9cfbd4c
fix:lint
Jan 21, 2026
648ed8d
fix(rn): improve css var fallback parsing
Jan 21, 2026
fd2cb86
Merge pull request #2409 from zifengjiang/fix/rn-fontfamily-unquoted
hiyuki Jan 21, 2026
27ae44e
fix: 修正兜底逻辑
Jan 21, 2026
f9d73d6
fix(rn): 去掉多余转换
Jan 21, 2026
af7e5b8
v@mpxjs/webpack-plugin@2.10.17-beta.10
Blackgan3 Jan 22, 2026
647b7fc
Merge branch 'master' into fix/rn-css-var-verify
hiyuki Jan 22, 2026
c2e0df5
Merge pull request #2406 from zifengjiang/fix/rn-css-var-verify
hiyuki Jan 22, 2026
933c98e
Merge branch 'master' into feat-transion-25.05.10
hiyuki Jan 22, 2026
b601e70
Merge branch 'master' into fix-fs-rewrite-error-throw
hiyuki Jan 22, 2026
8c31a78
Merge branch 'master' into feat-style-compile-251012-ms
hiyuki Jan 22, 2026
d6e8f69
Merge pull request #1990 from didi/feat-transion-25.05.10
hiyuki Jan 22, 2026
9b879a7
Merge branch 'master' into master
dos1in Jan 22, 2026
0c524cf
Merge branch 'master' into feat/rn-get-react
dos1in Jan 22, 2026
23649e4
Merge branch 'master' into feat-add-ble-wifi
hiyuki Jan 22, 2026
6d50090
Merge branch 'master' into feat-style-compile-251012-ms
hiyuki Jan 22, 2026
07e0696
Merge pull request #2397 from dos1in/master
hiyuki Jan 22, 2026
c4cf38e
Merge branch 'master' into feat-add-ble-wifi
hiyuki Jan 22, 2026
405aeb6
Merge branch 'master' into feat-add-ble-wifi
Jan 22, 2026
a8d4f7a
Merge branch 'master' into feat/rn-get-react
dos1in Jan 22, 2026
65effa7
补充蓝牙wifi部分的canIuse
Jan 22, 2026
ecc0dd5
Merge branch 'feat-add-ble-wifi' of https://github.com/didi/mpx into …
Jan 22, 2026
091acaf
Merge pull request #2263 from didi/feat-add-ble-wifi
hiyuki Jan 22, 2026
c444c45
Merge branch 'master' into feat/rn-get-react
dos1in Jan 22, 2026
c097ef3
feat: 修复recycle-view组件渲染导致item等组件销毁重建&支持list-footer节点
Jan 22, 2026
ef4b85a
Merge branch 'master' into fix-master-virtualbottom-config
hiyuki Jan 22, 2026
268b3da
Merge branch 'master' into fix-fs-rewrite-error-throw
hiyuki Jan 22, 2026
232211a
Merge pull request #2398 from dos1in/feat/rn-get-react
hiyuki Jan 22, 2026
5bbd225
Merge branch 'master' into fix-master-virtualbottom-config
hiyuki Jan 22, 2026
b6ce3f7
Merge branch 'master' into fix-rn-textarea-confirm-type
hiyuki Jan 22, 2026
81546b7
Merge pull request #2380 from didi/fix-rn-textarea-confirm-type
hiyuki Jan 22, 2026
5ca823b
fix: conflict;
Jan 22, 2026
a27ee7c
merge master
wenwenhua Jan 22, 2026
cfcdc94
Merge branch 'feat-style-compile-251012-ms' of github.com:didi/mpx in…
wenwenhua Jan 22, 2026
fd8b2b3
fix 单测
wenwenhua Jan 22, 2026
1655db9
feat: wx & web支持list-footer节点&支持itemHeight等高度动态变化
Jan 22, 2026
8be6bc2
feat: ali支持list-footer节点&支持itemHeight等高度动态变化
Jan 22, 2026
2388fd4
feat: scrollToIndex 支持 viewOffset参数
Jan 22, 2026
1cc4647
Merge branch 'master' into fix-master-virtualbottom-config
hiyuki Jan 23, 2026
fa3b920
Merge pull request #2375 from didi/feat-style-compile-251012-ms
hiyuki Jan 23, 2026
79d5164
Merge branch 'master' into fix-master-virtualbottom-config
hiyuki Jan 23, 2026
a03ef84
Merge branch 'master' into feat-component-error-add-stack
hiyuki Jan 23, 2026
aecde41
Merge pull request #2410 from didi/fix-master-virtualbottom-config
hiyuki Jan 23, 2026
1ffc9a3
Merge branch 'master' into fix-fs-rewrite-error-throw
hiyuki Jan 23, 2026
3c79091
Merge branch 'master' into feat-component-error-add-stack
hiyuki Jan 23, 2026
1de2850
refactor: 重构拓展组件引用机制
Jan 23, 2026
c57abd7
feat: 新增通过key复用dom机制,https://
Jan 23, 2026
4832b21
Merge branch 'master' into fix-defineOptions-ObjectMethod-syntax
hiyuki Jan 23, 2026
1a5507f
refactor: 修改sticky相关组件注册机制
Jan 23, 2026
ca7772c
Merge branch 'master' into feat-sticky-ali-v2
Jan 23, 2026
7eef708
Merge pull request #2401 from didi/fix-fs-rewrite-error-throw
hiyuki Jan 23, 2026
9e5e941
Merge branch 'master' into feat-component-error-add-stack
hiyuki Jan 23, 2026
e798421
feat: add defult generics component
Jan 23, 2026
80a4743
Merge pull request #2339 from didi/feat-component-error-add-stack
hiyuki Jan 23, 2026
23200e2
Merge branch 'master' into fix-defineOptions-ObjectMethod-syntax
hiyuki Jan 23, 2026
2d8a7e8
Merge pull request #2316 from didi/fix-defineOptions-ObjectMethod-syntax
hiyuki Jan 23, 2026
1e555cd
Merge branch 'master' into fix-fatch-usepre-cache
hiyuki Jan 23, 2026
5caae86
Merge branch 'master' into feat-scroll-performance
hiyuki Jan 26, 2026
8fd18a6
Merge pull request #2286 from didi/feat-scroll-performance
hiyuki Jan 26, 2026
2eee39b
Merge branch 'master' into fix-input-bindfocus
hiyuki Jan 26, 2026
afced3a
Merge pull request #2309 from didi/fix-input-bindfocus
hiyuki Jan 26, 2026
928d3ac
Merge branch 'master' into fix-fatch-usepre-cache
hiyuki Jan 26, 2026
4b85bbf
Merge pull request #2306 from didi/fix-fatch-usepre-cache
hiyuki Jan 26, 2026
66db358
Merge branch 'refs/heads/master' into fix-drn-2.10.17
Blackgan3 Jan 26, 2026
80cffcf
feat: merge origin master
Blackgan3 Jan 26, 2026
8ad1bcb
fix auto to number
wenwenhua Jan 26, 2026
31fe76d
Merge pull request #2414 from didi/fix-drn-2.10.17-animation-api-fix
mackwang112 Jan 27, 2026
1a7bed0
v2.10.17-beta.11
mackwang112 Jan 27, 2026
fbe97cf
chore: rename recycle-list
Jan 28, 2026
e491f1b
fix: lint error
Jan 28, 2026
c5b3d7b
Merge branch 'fix-drn-2.10.17' into feat-sticky-ali-v2-2.10.17
Jan 28, 2026
fcf39f5
Merge pull request #2417 from didi/feat-sticky-ali-v2-2.10.17
Blackgan3 Jan 28, 2026
ed182a1
v2.10.17-beta.13
Blackgan3 Jan 29, 2026
ae64dd9
feat: 屏幕尺寸变化时仅重新渲染使用rpx/vw/vh单位的组件
mackwang112 Jan 29, 2026
11d0a83
fix: 修复rpx在屏幕尺寸变化时未跟随变化
mackwang112 Jan 28, 2026
c882a2c
@mpxjs/core@2.10.17-beta.14
mackwang112 Jan 29, 2026
58a82ec
fix: react-native-fast-image 的引动调整兜底
Blackgan3 Jan 30, 2026
c90bdd7
Merge remote-tracking branch 'origin/fix-drn-2.10.17' into fix-drn-2.…
Blackgan3 Jan 30, 2026
62026a9
fix: 撤回rpx按需刷新
mackwang112 Jan 30, 2026
eb2ed9f
fix: 临时修复部分安卓机型下onFinalize拿到的absolute值
Jul 31, 2026
73a799f
fix: 解决冲突
Aug 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

获取菜单按钮(右上角胶囊按钮)的布局位置信息。坐标信息以屏幕左上角为原点。

支持情况: 微信、支付宝
支持情况: 微信、支付宝、React Native

> **React Native 说明**: 由于 RN 应用没有微信的右上角胶囊按钮,该 API 会基于屏幕尺寸和安全区返回一个模拟的胶囊位置,可用于获取顶部导航区域的参考尺寸,保持代码兼容性。

[参考文档](https://developers.weixin.qq.com/miniprogram/dev/api/ui/menu/wx.getMenuButtonBoundingClientRect.html)

Expand Down
23 changes: 0 additions & 23 deletions docs-vitepress/api/compile.md
Original file line number Diff line number Diff line change
Expand Up @@ -2092,27 +2092,4 @@ module.exports = defineConfig({
}
</script>

```
## useExtendComponents
`object`

除基础组件外,Mpx 还提供了一些扩展组件。这些组件需要开发者根据运行环境进行按需注册。注册成功后,即可作为全局自定义组件使用。
```js
// mpx.config.js
defineConfig({
pluginOptions: {
mpx: {
plugin: {
useExtendComponents: {
wx: ["recycle-view"],
ali: ["recycle-view"],
web: ["recycle-view"],
ios: ["recycle-view"],
android: ["recycle-view"],
harmony: ["recycle-view"]
}
}
}
}
})
```
36 changes: 19 additions & 17 deletions docs-vitepress/guide/basic/component.md
Original file line number Diff line number Diff line change
Expand Up @@ -712,13 +712,27 @@ Mpx中提供了使用方法类似于 Vue 的动态组件能力,这是一个基
```html
<!-- 组件模板 -->
<!-- components/mySlot.mpx -->
<view>
<view>这是组件模板</view>
<slot name="slot1"></slot>
<slot name="slot2"></slot>
</view>
<template>
<view>
<view>这是组件模板</view>
<slot name="slot1"></slot>
<slot name="slot2"></slot>
</view>
<template>

<script>
import { createComponent } from '@mpxjs/core'

createComponent({
options: {
multipleSlots: true // 启用多slot支持
}
})
</script>
```

> 注意:使用多个slot时,需要在组件选项中开启 `multipleSlots: true`。

使用组件时:

```html
Expand All @@ -732,16 +746,6 @@ Mpx中提供了使用方法类似于 Vue 的动态组件能力,这是一个基
</view>
</template>

<script>
import { createComponent } from '@mpxjs/core'

createComponent({
options: {
multipleSlots: true // 启用多slot支持
}
})
</script>

<script type="application/json">
{
"usingComponents": {
Expand All @@ -751,6 +755,4 @@ createComponent({
</script>
```

> 注意:使用多个slot时,需要在组件选项中开启 `multipleSlots: true`。

更多关于插槽的使用细节可查看[微信小程序官方文档](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html)。
155 changes: 118 additions & 37 deletions docs-vitepress/guide/extend/extend-component.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,21 @@
# Mpx 扩展组件

除基础组件外,Mpx 额外提供一些扩展组件。扩展组件需开发者在 `mpx.config.js`中通过编译配置`useExtendComponents`按需注册,注册成功后即可作为全局自定义组件使用。
```js
// mpx.config.js
defineConfig({
pluginOptions: {
mpx: {
plugin: {
useExtendComponents: {
wx: ["recycle-view"],
ali: ["recycle-view"],
web: ["recycle-view"],
ios: ["recycle-view"],
android: ["recycle-view"],
harmony: ["recycle-view"]
}
}
}
除基础组件外,Mpx 额外提供一些扩展组件。扩展组件需要在页面或组件的 `usingComponents` 中注册后使用。

```html
<script type="application/json">
{
"usingComponents": {
"section-list": "@mpxjs/webpack-plugin/lib/runtime/components/extends/section-list"
}
})
}
</script>
```

Mpx 会根据当前编译的目标平台(wx/ali/web/ios/android/harmony),自动解析到对应平台的扩展组件实现。


## recycle-view
## section-list

跨端虚拟列表组件,可自定义分组头、列表头、列表项,自动分段渲染兼容各端。

Expand All @@ -32,19 +25,22 @@ defineConfig({

| 属性名 | 类型 | 默认值 | 说明 | 支持平台 |
|-----------------------|-------------|----------|------------------------|-----------|
| height | String/Number | 100% | 组件高度 | 全平台 |
| width | String/Number | 100% | 组件宽度 | 全平台 |
| listData | Array | [] | 列表数据,如需使用列表分组头 `section-header`,对应 item 的数据需要包含 `isSectionHeader: true` 标识 | 全平台 |
| enable-sticky | Boolean | false | 启用分组吸顶 | 全平台<br>⚠️微信小程序环境,需要使用 skyline 渲染模式,webview 模式不支持;web 环境仅支持移动端,不支持 pc 端 |
| scroll-with-animation | Boolean | false | 滚动动画 | 全平台 |
| generic:recycle-item | string | | 列表项,抽象节点组件名,对应组件需要通过 usingComponents 注册 | 全平台 |
| generic:section-header | string | | 列表分组头,抽象节点组件名,对应组件需要通过 usingComponents 注册 | 全平台 |
| generic:list-header | string | | 列表头,抽象节点组件名,对应组件需要通过 usingComponents 注册 | 全平台 |
| useListHeader | Boolean | false | 使用自定义列表头 | 全平台 |
| listHeaderData | Object | {} | 列表头数据 | 全平台 |
| itemHeight | Object | {} | 列表项高度配置(支持 getter/value),必须配置 | 全平台 |
| sectionHeaderHeight | Object | {} | 分组头部高度配置(getter/value),若使用了自定义分组头必须配置 | 全平台 |
| listHeaderHeight | Object | {} | 列表头部高度配置(getter/value),若使用了列表头必须配置 | 全平台 |
| height | String/Number | 100% | 组件高度 | 微信小程序、支付宝小程序、Web、RN |
| width | String/Number | 100% | 组件宽度 | 微信小程序、支付宝小程序、Web、RN |
| listData | Array | [] | 列表数据,如需使用列表分组头 `section-header`,对应 item 的数据需要包含 `isSectionHeader: true` 标识 | 微信小程序、支付宝小程序、Web、RN |
| enable-sticky | Boolean | false | 启用分组吸顶 | 微信小程序、支付宝小程序、Web、RN<br>⚠️微信小程序环境,需要使用 skyline 渲染模式,webview 模式不支持;web 环境仅支持移动端,不支持 pc 端 |
| scroll-with-animation | Boolean | false | 滚动动画 | 微信小程序、支付宝小程序、Web、RN |
| useListHeader | Boolean | false | 使用自定义列表头 | 微信小程序、支付宝小程序、Web、RN |
| listHeaderData | Object | {} | 列表头数据 | 微信小程序、支付宝小程序、Web、RN |
| useListFooter | Boolean | false | 使用自定义列表页脚 | 微信小程序、支付宝小程序、Web、RN |
| listFooterData | Object | {} | 列表头数据 | 微信小程序、支付宝小程序、Web、RN |
| generic:recycle-item | String | | 列表项,抽象节点组件名,对应组件需要通过 usingComponents 注册 | 微信小程序、支付宝小程序、Web、RN |
| generic:section-header | String | | 列表分组头,抽象节点组件名,对应组件需要通过 usingComponents 注册 | 微信小程序、支付宝小程序、Web、RN |
| generic:list-header | String | | 列表头,抽象节点组件名,对应组件需要通过 usingComponents 注册 | 微信小程序、支付宝小程序、Web、RN |
| generic:list-footer | String | | 列表页脚,抽象节点组件名,对应组件需要通过 usingComponents 注册 | 微信小程序、支付宝小程序、Web、RN |
| itemHeight | Object | {} | 列表项高度配置(支持 getter/value),必须配置 | 微信小程序、支付宝小程序、Web、RN |
| sectionHeaderHeight | Object | {} | 分组头部高度配置(getter/value),若使用了自定义分组头必须配置 | 微信小程序、支付宝小程序、Web、RN |
| listHeaderHeight | Object | {} | 列表头部高度配置(getter/value),若使用了列表头必须配置 | 微信小程序、支付宝小程序、Web、RN |
| bufferScale | Number | 1 | 渲染缓冲区行数(虚拟滚动优化) | 仅支付宝小程序/web支持 |
| minRenderCount | Number | 10 | 最小渲染项目数 | 仅支付宝小程序/web支持 |

Expand Down Expand Up @@ -74,19 +70,20 @@ height: {

| 事件名 | 说明 | 支持平台 |
|-----------------------|-----------------------------------|--------------|
| bindscroll | 滚动时触发,返回滚动信息 | 全平台 |
| bindscrolltolower | 滚动到底部/触底通知 | 全平台 |
| bindscrollToIndex | 组件方法,滚动到指定索引 | 全平台 |
| bindscroll | 滚动时触发,返回滚动信息 | 微信小程序、支付宝小程序、Web、RN |
| bindscrolltolower | 滚动到底部/触底通知 | 微信小程序、支付宝小程序、Web、RN |
| bindscrollToIndex | 组件方法,滚动到指定索引 | 微信小程序、支付宝小程序、Web、RN |

`scrollToIndex({ index, animated, viewPosition })` 参数说明:
- `index`:目标索引
- `animated`:是否滚动动画
- `viewOffset`:滚动偏移量
- `viewPosition`:滚动定位,0:顶部, 0.5:中间, 1:底部

### 用法示例

```js
<recycle-view
<section-list
generic:recycle-item="normal-recycle-item"
generic:section-header="section-header"
generic:list-header="list-header"
Expand Down Expand Up @@ -154,6 +151,7 @@ height: {
<script type="application/json">
{
"usingComponents": {
"section-list": "@mpxjs/webpack-plugin/lib/runtime/components/extends/section-list",
"normal-recycle-item": "@/components/recycle-item",
"section-header": "@/components/section-header",
"list-header": "@/components/list"
Expand All @@ -168,6 +166,89 @@ height: {
- 可直接调用 ref 实例执行 `scrollToIndex` 方法实现滚动。
- 如果用户滑动的速度超过渲染的速度,则会先看到空白的内容,这是为了长列表优化不得不作出的妥协。
- 当某行滑出渲染区域之外后,其内部状态将不会保留。
- 在 RN 环境,recycle-view 通过 RN 提供的 SectionList 实现分组吸顶。受 RN 底层实现机制限制,开启 `enable-sticky` 且快速滑动时,自定义分组头有时会出现闪烁现象。此问题需要等待 RN 官方修复,我们会持续关注并跟进。
- 在 RN 环境,section-list 通过 RN 提供的 SectionList 实现分组吸顶。受 RN 底层实现机制限制,开启 `enable-sticky` 且快速滑动时,自定义分组头有时会出现闪烁现象。此问题需要等待 RN 官方修复,我们会持续关注并跟进。
- 若某行需要使用 `section-header` 对应的抽象节点渲染,则该行数据必须包含 `isSectionHeader: true` 字段;否则默认使用 `recycle-item` 对应的抽象节点渲染


## sticky-section

吸顶布局容器,仅支持作为 `<scroll-view>` 的直接子节点

支持平台:微信小程序(仅 skyline 支持)、支付宝小程序、Web、RN

### 用法示例

```html
<template>
<scroll-view>
<sticky-section>
<sticky-header>这是会吸顶的内容</sticky-header>
</sticky-section>
</scroll-view>
</template>

<script type="application/json">
{
"usingComponents": {
"sticky-section": "@mpxjs/webpack-plugin/lib/runtime/components/extends/sticky-section"
}
}
</script>
```


## sticky-header

吸顶头部组件,支持在滚动容器中实现元素吸顶效果。仅支持作为 `<scroll-view>` 的直接子节点或 `sticky-section` 组件直接子节点

支持平台:微信小程序(仅 skyline 支持)、支付宝小程序、Web、RN

### 属性

| 属性名 | 类型 | 默认值 | 说明 | 支持平台 |
|-------|------|--------|------|---------|
| offsetTop | Number | 0 | 吸顶距离顶部的偏移量 | 微信小程序、支付宝小程序、Web、RN |
| padding | Array | - | 内边距配置 [top, right, bottom, left] | 微信小程序、支付宝小程序、Web、RN |
| scrollViewId | String | '' | 滚动容器的 id, 支付宝环境必传, 值与选择器 id 值一致 | 支付宝小程序 |
| stickyId | String | '' | 吸顶元素的唯一标识,支付宝环境必传,值与选择器 id 值一致 | 支付宝小程序 |
| enablePolling | Boolean | false | 启用轮询刷新 | 支付宝小程序 |
| pollingDuration | Number | 300 | 轮询间隔时间(毫秒) | 支付宝小程序 |

### 事件

| 事件名 | 说明 | 支持平台 |
|-------|------|---------|
| stickontopchange | 吸顶状态改变时触发,返回 { isStickOnTop, id } | 微信小程序、支付宝小程序、Web、RN |

**注意**:
- 支付宝小程序中该功能基于 IntersectionObserver 实现,但在支付宝平台上,IntersectionObserver 的回调可能存在触发不及时或不触发的情况,进而导致 stickontopchange 事件无法及时触发,或 sticky-header 吸附位置异常。

为此我们提供了 enablePolling 属性。开启后将通过定时轮询的方式校验 sticky-header 当前吸附状态是否正确,若发现异常会自动进行修正。建议在支付宝平台根据实际情况按需开启该配置。

- RN 环境的 sticky-header 更适用于内容稳定,状态不常变更的场景使用,目前如果 sticky-header 还在动画过程中就触发组件更新(如在bindstickontopchange 回调中立刻更新 state)、scroll-view 内容高度由多变少、通过修改 scroll-into-view、scroll-top 让 scroll-view 滚动,以上场景在安卓上都可能会导致闪烁或抖动


### 用法示例

```html
<template>
<scroll-view id="scrollViewContainer" scroll-y>
<sticky-header
scroll-view-id="scrollViewContainer"
sticky-id="header1"
offset-top="0"
bind:stickontopchange="handleStickyChange">
<view>这是会吸顶的内容</view>
</sticky-header>
</scroll-view>
</template>

<script type="application/json">
{
"usingComponents": {
"sticky-header": "@mpxjs/webpack-plugin/lib/runtime/components/extends/sticky-header"
}
}
</script>
```

21 changes: 21 additions & 0 deletions docs-vitepress/guide/rn/application-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -476,3 +476,24 @@ boolean
Mpx 框架默认会使用 `ReactNative.AppState.addEventListener('change', callback)` 作为 Mpx 应用切换切换台的驱动,从而触发对于的钩子(如onhide/onshow)

在需要将 RN 应用嵌入到现有的 NA 应用中时,可能会出现AppState触发时机异常的情况(例如从 RN 页面跳转到 NA 页面时),此时可以将 disableAppStateListener 设置为 true 来禁用框架内部对 AppState 的监听。但需要在合适的时机手动调用 setAppShow() 与 setAppHide() 方法来进行驱动以确保对于的钩子能正常触发。


### 自定义设置底部虚拟按键区高度

#### mpx.config.rnConfig.getBottomVirtualHeight

```ts
() => number
```
Android的不同系统或者手机的虚拟按键区高度可能存在不同的情况,框架内部统一使用了initialWindowMetrics.insets.bottom,如存在需要单独调整的场景可自定义设置虚拟按键区高度。

```javascript
// 例子
import ReactNative from 'react-native'
import { initialWindowMetrics } from 'react-native-safe-area-context'
mpx.config.rnConfig.getBottomVirtualHeight = (bottomHeight) => {
const screenDimensions = ReactNative.Dimensions.get('screen')
const windowDimensions = ReactNative.Dimensions.get('window')
return Math.max(initialWindowMetrics?.insets?.bottom || 0 , (screenDimensions.height - windowDimensions.height - ReactNative.StatusBar.currentHeight) || 0, 0)
}vscode 如何打开markdown
```
Loading
Loading