From 312822abe44f693338a73f62d337da41e1a3ce8a Mon Sep 17 00:00:00 2001 From: mackwang Date: Mon, 18 Aug 2025 16:21:30 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20=E8=BE=93=E5=87=BARN=E5=8E=9F?= =?UTF-8?q?=E7=94=9F=E7=BB=84=E4=BB=B6=E6=94=AF=E6=8C=81class=E4=B8=8Estyl?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../builtInMixins/styleHelperMixin.ios.js | 28 +++++++++++++------ .../lib/template-compiler/compiler.js | 2 +- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js index d5ffa9c19a..ea0f13fc2d 100644 --- a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js +++ b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js @@ -183,7 +183,10 @@ export default function styleHelperMixin () { return concat(staticClass, stringifyDynamicClass(dynamicClass)) }, __getStyle (staticClass, dynamicClass, staticStyle, dynamicStyle, hide) { - const result = {} + const isNativeStaticStyle = typeof staticStyle !== 'string' + let result = isNativeStaticStyle ? [] : {} + const mergeResult = isNativeStaticStyle ? (o) => result.push(o) : (o) => Object.assign(result, o) + const classMap = this.__getClassMap?.() || {} const appClassMap = global.__getAppClassMap?.() || {} @@ -192,24 +195,34 @@ export default function styleHelperMixin () { const classString = mpEscape(concat(staticClass, stringifyDynamicClass(dynamicClass))) classString.split(/\s+/).forEach((className) => { if (classMap[className]) { - Object.assign(result, classMap[className]) + mergeResult(classMap[className]) } else if (appClassMap[className]) { // todo 全局样式在每个页面和组件中生效,以支持全局原子类,后续支持样式模块复用后可考虑移除 - Object.assign(result, appClassMap[className]) + mergeResult(appClassMap[className]) } else if (isObject(this.__props[className])) { // externalClasses必定以对象形式传递下来 - Object.assign(result, this.__props[className]) + mergeResult(this.__props[className]) } }) } if (staticStyle || dynamicStyle) { - const styleObj = Object.assign({}, parseStyleText(staticStyle), normalizeDynamicStyle(dynamicStyle)) - Object.assign(result, transformStyleObj(styleObj)) + const styleObj = {} + if (isNativeStaticStyle) { + if (Array.isArray()) { + result = result.concat(staticStyle) + } else { + mergeResult(staticStyle) + } + } else { + Object.assign(styleObj, parseStyleText(staticStyle)) + } + Object.assign(styleObj, normalizeDynamicStyle(dynamicStyle)) + mergeResult(transformStyleObj(styleObj)) } if (hide) { - Object.assign(result, { + mergeResult({ // display: 'none' // RN下display:'none'容易引发未知异常问题,使用布局样式模拟 flex: 0, @@ -220,7 +233,6 @@ export default function styleHelperMixin () { overflow: 'hidden' }) } - return isEmptyObject(result) ? empty : result } } diff --git a/packages/webpack-plugin/lib/template-compiler/compiler.js b/packages/webpack-plugin/lib/template-compiler/compiler.js index cd1e7c5c76..4318d872bd 100644 --- a/packages/webpack-plugin/lib/template-compiler/compiler.js +++ b/packages/webpack-plugin/lib/template-compiler/compiler.js @@ -2726,8 +2726,8 @@ function processElement (el, root, options, meta) { processIf(el) processFor(el) processRefReact(el, meta) + processStyleReact(el, options) if (!pass) { - processStyleReact(el, options) processEventReact(el, options) processComponentGenerics(el, meta) processComponentIs(el, options) From 563cb111e24ba3fefa5d20a8c182d003da98b327 Mon Sep 17 00:00:00 2001 From: mackwang Date: Mon, 18 Aug 2025 17:26:38 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20=E8=BE=93=E5=87=BARN=E5=8E=9F?= =?UTF-8?q?=E7=94=9F=E7=BB=84=E4=BB=B6=E6=94=AF=E6=8C=81class=E4=B8=8Estyl?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/src/platform/builtInMixins/styleHelperMixin.ios.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js index ea0f13fc2d..e5c65cb4f1 100644 --- a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js +++ b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js @@ -183,7 +183,7 @@ export default function styleHelperMixin () { return concat(staticClass, stringifyDynamicClass(dynamicClass)) }, __getStyle (staticClass, dynamicClass, staticStyle, dynamicStyle, hide) { - const isNativeStaticStyle = typeof staticStyle !== 'string' + const isNativeStaticStyle = staticStyle && typeof staticStyle !== 'string' let result = isNativeStaticStyle ? [] : {} const mergeResult = isNativeStaticStyle ? (o) => result.push(o) : (o) => Object.assign(result, o) From bb6453e038d2f1282cb0d4afd6b12a127c61b29f Mon Sep 17 00:00:00 2001 From: mackwang Date: Tue, 19 Aug 2025 16:38:45 +0800 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20=E6=9B=B4=E6=94=B9RN=E5=8E=9F?= =?UTF-8?q?=E7=94=9FStyle=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/builtInMixins/styleHelperMixin.ios.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js index e5c65cb4f1..0f24e5ec4e 100644 --- a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js +++ b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js @@ -1,4 +1,4 @@ -import { isObject, isArray, dash2hump, cached, isEmptyObject } from '@mpxjs/utils' +import { isObject, isArray, dash2hump, cached, isEmptyObject, hasOwn } from '@mpxjs/utils' import { Dimensions, StyleSheet } from 'react-native' import Mpx from '../../index' @@ -176,6 +176,14 @@ function transformStyleObj (styleObj) { return transformed } +function isNativeStyle (style) { + return Array.isArray(style) || ( + typeof style === 'object' && + // Reanimated 的 animated style 通常会包含 viewDescriptors 或 _animations + (hasOwn(style, 'viewDescriptors') || hasOwn(style, '_animations')) + ) +} + export default function styleHelperMixin () { return { methods: { @@ -183,7 +191,7 @@ export default function styleHelperMixin () { return concat(staticClass, stringifyDynamicClass(dynamicClass)) }, __getStyle (staticClass, dynamicClass, staticStyle, dynamicStyle, hide) { - const isNativeStaticStyle = staticStyle && typeof staticStyle !== 'string' + const isNativeStaticStyle = staticStyle && isNativeStyle(staticStyle) let result = isNativeStaticStyle ? [] : {} const mergeResult = isNativeStaticStyle ? (o) => result.push(o) : (o) => Object.assign(result, o) From e6643a86c910be81464c38bbeb66176b570d6b07 Mon Sep 17 00:00:00 2001 From: mackwang112 Date: Tue, 26 Aug 2025 15:02:49 +0800 Subject: [PATCH 4/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=B7=B2=E7=9F=A5?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/platform/builtInMixins/styleHelperMixin.ios.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js index 0f24e5ec4e..8aed6a4992 100644 --- a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js +++ b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js @@ -217,11 +217,7 @@ export default function styleHelperMixin () { if (staticStyle || dynamicStyle) { const styleObj = {} if (isNativeStaticStyle) { - if (Array.isArray()) { - result = result.concat(staticStyle) - } else { - mergeResult(staticStyle) - } + mergeResult(staticStyle) } else { Object.assign(styleObj, parseStyleText(staticStyle)) } @@ -241,7 +237,8 @@ export default function styleHelperMixin () { overflow: 'hidden' }) } - return isEmptyObject(result) ? empty : result + const isEmpty = isNativeStaticStyle ? result.length > 0 : isEmptyObject(result) + return isEmpty ? empty : result } } } From 34b2e05d2e100c921279237669524110078499f8 Mon Sep 17 00:00:00 2001 From: mackwang112 Date: Tue, 26 Aug 2025 15:17:18 +0800 Subject: [PATCH 5/7] fix: eslint --- .../core/src/platform/builtInMixins/styleHelperMixin.ios.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js index 8aed6a4992..ee81a6bcbf 100644 --- a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js +++ b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js @@ -192,7 +192,7 @@ export default function styleHelperMixin () { }, __getStyle (staticClass, dynamicClass, staticStyle, dynamicStyle, hide) { const isNativeStaticStyle = staticStyle && isNativeStyle(staticStyle) - let result = isNativeStaticStyle ? [] : {} + const result = isNativeStaticStyle ? [] : {} const mergeResult = isNativeStaticStyle ? (o) => result.push(o) : (o) => Object.assign(result, o) const classMap = this.__getClassMap?.() || {} From 0ecc386fe51db8baa87ca407bbf6703e3dcf9c2c Mon Sep 17 00:00:00 2001 From: mackwang112 Date: Tue, 26 Aug 2025 16:48:08 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DstaticStyle?= =?UTF-8?q?=E4=B8=BA=E6=95=B0=E7=BB=84=E5=AF=BC=E8=87=B4=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/src/platform/builtInMixins/styleHelperMixin.ios.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js index ee81a6bcbf..874e9e6b65 100644 --- a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js +++ b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js @@ -217,7 +217,11 @@ export default function styleHelperMixin () { if (staticStyle || dynamicStyle) { const styleObj = {} if (isNativeStaticStyle) { - mergeResult(staticStyle) + if (Array.isArray(staticStyle)) { + result = result.concat(staticStyle) + } else { + mergeResult(staticStyle) + } } else { Object.assign(styleObj, parseStyleText(staticStyle)) } From fe19106a1d92f75a48584ae8a1a8056c13b70ab3 Mon Sep 17 00:00:00 2001 From: mackwang112 Date: Tue, 26 Aug 2025 16:49:09 +0800 Subject: [PATCH 7/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DstaticStyle?= =?UTF-8?q?=E4=B8=BA=E6=95=B0=E7=BB=84=E5=AF=BC=E8=87=B4=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/src/platform/builtInMixins/styleHelperMixin.ios.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js index 874e9e6b65..0b3b075718 100644 --- a/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js +++ b/packages/core/src/platform/builtInMixins/styleHelperMixin.ios.js @@ -192,7 +192,7 @@ export default function styleHelperMixin () { }, __getStyle (staticClass, dynamicClass, staticStyle, dynamicStyle, hide) { const isNativeStaticStyle = staticStyle && isNativeStyle(staticStyle) - const result = isNativeStaticStyle ? [] : {} + let result = isNativeStaticStyle ? [] : {} const mergeResult = isNativeStaticStyle ? (o) => result.push(o) : (o) => Object.assign(result, o) const classMap = this.__getClassMap?.() || {}