Skip to content

Commit bb2e9bd

Browse files
committed
Merge branch 'master' of https://github.com/dos1in/mpx
2 parents e922c68 + 2947cf9 commit bb2e9bd

File tree

4 files changed

+30
-16
lines changed

4 files changed

+30
-16
lines changed

docs-vitepress/guide/advance/platform.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,7 @@ onShow|是
630630
onHide|是
631631
onUnload|是
632632
onError|是
633-
onServerPrefetch
633+
onServerPrefetch|
634634
created|是
635635
attached|是
636636
ready|是

docs-vitepress/guide/platform/rn.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ RN:
183183
> 1. 只有父级 view 节点的文本样式可以被子 text 节点继承;
184184
> 2. view 节点直接包裹文本实际上等同于 view>text>文本,Mpx 框架在编译时若检测到 view 节点直接包裹文本会自动添加一层 text 节点;
185185
> 3. 多级 text 节点可实现文本样式的继承,比如 text>text>文本 ;
186-
> 4. 若不想使用 Mpx 内部实现的 view>text>文本 这种文本样式继承,可设置`disable-default-style=true` 来关闭该继承逻辑;
187186
### 简写样式属性
188187
在 Mpx 内对于通过 class 类来定义的样式会按照 RN 的样式规则在编译处理一遍,其中最重要的一部分就是将 RN 不支持简写属性按约定的规则转换成 RN 能支持多属性结构。
189188

@@ -682,7 +681,7 @@ Mpx 输出 React Native 支持以下模版指令。
682681
注意事项
683682

684683
1. 目前不支持自定义下拉刷新节点,使用 slot="refresher" 声明无效,在 React Native 环境中还是会被当作普通节点渲染出来
685-
2. 若使用 scroll-into-view 属性,需要 id 对应的组件节点添加 wx:ref 标记,否则无法正常滚动
684+
2. 若使用 scroll-into-view 属性,需要 id 对应的组件节点添加 wx:ref 标记,否则无法正常滚动。另外组件节点需要是内置基础组件,自定义组件暂不支持。
686685
3. simultaneous-handlers 为 RN 环境特有属性,具体含义可参考[react-native-gesture-handler](https://docs.swmansion.com/react-native-gesture-handler/docs/fundamentals/gesture-composition/#simultaneouswithexternalgesture)
687686
4. wait-for 为 RN 环境特有属性,具体含义可参考[react-native-gesture-handler](https://docs.swmansion.com/react-native-gesture-handler/docs/fundamentals/gesture-composition/#requireexternalgesturetofail)
688687

@@ -707,7 +706,9 @@ Mpx 输出 React Native 支持以下模版指令。
707706
| next-margin | String | `0` | 后边距,可用于露出后一项的一小部分,接受px |
708707
| scale | Boolean | `false` | 滑动时是否开启前后元素缩小,默认是缩放0.7倍, 暂不支持自定义 |
709708
| easing-function | String | `linear` | 支持 linear、easeInCubic、easeOutCubic、easeInOutCubic|
710-
| bindchange | eventhandle|| current 改变时会触发 change 事件,`event.detail = {current, source}`|
709+
| simultaneous-handlers | `Array<object>`| [] | RN环境特有属性,主要用于组件嵌套场景,允许多个手势同时识别和处理并触发,这个属性可以指定一个或多个手势处理器,处理器支持使用 this.$refs.xxx 获取组件实例来作为数组参数传递给 swiper 组件|
710+
| wait-for | `Array<object>`| [] | RN环境特有属性,主要用于组件嵌套场景,允许延迟激活处理某些手势,这个属性可以指定一个或多个手势处理器,处理器支持使用 this.$refs.xxx 获取组件实例来作为数组参数传递给 swiper 组件|
711+
| disableGesture | Boolean| false | 禁用 swiper 滑动手势。若开启用户无法通过手势滑动 swiper,只能通过开启 autoPlay 进行自动轮播|
711712

712713

713714

packages/webpack-plugin/lib/runtime/components/react/mpx-movable-view.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -200,16 +200,6 @@ const _MovableView = forwardRef<HandlerRef<View, MovableViewProps>, MovableViewP
200200
)
201201
}, [])
202202

203-
// 节流版本的 change 事件触发
204-
const handleTriggerChangeThrottled = useCallback(({ x, y, type }: { x: number; y: number; type?: string }) => {
205-
'worklet'
206-
const now = Date.now()
207-
if (now - lastChangeTime.value >= changeThrottleTime) {
208-
lastChangeTime.value = now
209-
runOnJS(runOnJSCallback)('handleTriggerChange', { x, y, type })
210-
}
211-
}, [changeThrottleTime])
212-
213203
useEffect(() => {
214204
runOnUI(() => {
215205
if (offsetX.value !== x || offsetY.value !== y) {
@@ -414,6 +404,16 @@ const _MovableView = forwardRef<HandlerRef<View, MovableViewProps>, MovableViewP
414404
})
415405
const runOnJSCallback = useRunOnJSCallback(runOnJSCallbackRef)
416406

407+
// 节流版本的change事件触发
408+
const handleTriggerChangeThrottled = useCallback(({ x, y, type }: { x: number; y: number; type?: string }) => {
409+
'worklet'
410+
const now = Date.now()
411+
if (now - lastChangeTime.value >= changeThrottleTime) {
412+
lastChangeTime.value = now
413+
runOnJS(runOnJSCallback)('handleTriggerChange', { x, y, type })
414+
}
415+
}, [changeThrottleTime])
416+
417417
const gesture = useMemo(() => {
418418
const handleTriggerMove = (e: GestureTouchEvent) => {
419419
'worklet'

packages/webpack-plugin/lib/runtime/components/react/mpx-scroll-view.tsx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,18 @@ const _ScrollView = forwardRef<HandlerRef<ScrollView & View, ScrollViewProps>, S
211211

212212
const scrollViewRef = useRef<ScrollView>(null)
213213

214+
const propsRef = useRef(props)
215+
const refresherStateRef = useRef({
216+
hasRefresher,
217+
refresherTriggered
218+
})
219+
220+
propsRef.current = props
221+
refresherStateRef.current = {
222+
hasRefresher,
223+
refresherTriggered
224+
}
225+
214226
const runOnJSCallbackRef = useRef({
215227
setEnableScroll,
216228
setScrollBounces,
@@ -524,6 +536,7 @@ const _ScrollView = forwardRef<HandlerRef<ScrollView & View, ScrollViewProps>, S
524536

525537
// 处理刷新
526538
function onRefresh () {
539+
const { hasRefresher, refresherTriggered } = refresherStateRef.current
527540
if (hasRefresher && refresherTriggered === undefined) {
528541
// 处理使用了自定义刷新组件,又没设置 refresherTriggered 的情况
529542
setRefreshing(true)
@@ -535,10 +548,10 @@ const _ScrollView = forwardRef<HandlerRef<ScrollView & View, ScrollViewProps>, S
535548
}
536549
}, 500)
537550
}
538-
const { bindrefresherrefresh } = props
551+
const { bindrefresherrefresh } = propsRef.current
539552
bindrefresherrefresh &&
540553
bindrefresherrefresh(
541-
getCustomEvent('refresherrefresh', {}, { layoutRef }, props)
554+
getCustomEvent('refresherrefresh', {}, { layoutRef }, propsRef.current)
542555
)
543556
}
544557

0 commit comments

Comments
 (0)