From 8ad19709e6ca53c40c4703f6f74c5a040062d2ad Mon Sep 17 00:00:00 2001 From: human Date: Wed, 5 Mar 2025 12:12:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Donlaunch&onshow?= =?UTF-8?q?=E5=86=85=E5=8F=82=E6=95=B0=E8=A2=ABdecode=E8=BF=87=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/package.json | 6 +++--- packages/core/src/platform/createApp.ios.js | 6 +++--- .../src/platform/patch/getDefaultOptions.ios.js | 10 ++-------- packages/utils/src/url.js | 17 +++++++++++++++-- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 5b4632524b..e9a566ca09 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -27,15 +27,15 @@ "@d11/react-native-fast-image": "^8.6.12", "@mpxjs/api-proxy": "^2.9.0", "@mpxjs/store": "^2.9.0", - "@react-navigation/native": "^7.0.14", - "@react-navigation/native-stack": "^7.2.0", + "@react-navigation/native": "^6.1.18", + "@react-navigation/native-stack": "^6.11.0", "react": "*", "react-native": "*", "react-native-gesture-handler": "^2.19.0", "react-native-linear-gradient": "^2.8.3", "react-native-reanimated": "^3.15.2", "react-native-safe-area-context": "^4.14.0", - "react-native-screens": "^4.1.0", + "react-native-screens": "^3.32.0", "react-native-video": "^6.9.0", "react-native-webview": "^13.10.5", "vue": "^2.7.10", diff --git a/packages/core/src/platform/createApp.ios.js b/packages/core/src/platform/createApp.ios.js index 478e227bfd..bbc2547804 100644 --- a/packages/core/src/platform/createApp.ios.js +++ b/packages/core/src/platform/createApp.ios.js @@ -1,6 +1,6 @@ import transferOptions from '../core/transferOptions' import builtInKeysMap from './patch/builtInKeysMap' -import { makeMap, spreadProp, getFocusedNavigation, hasOwn } from '@mpxjs/utils' +import { makeMap, spreadProp, getFocusedNavigation, hasOwn, encodeObjValues } from '@mpxjs/utils' import { mergeLifecycle } from '../convertor/mergeLifecycle' import { LIFECYCLE } from '../platform/patch/lifecycle/index' import Mpx from '../index' @@ -111,7 +111,7 @@ export default function createApp (options) { const current = state.routes[state.index] const options = { path: current.name, - query: current.params, + query: encodeObjValues(current.params), scene: 0, shareTicket: '', referrerInfo: {}, @@ -140,7 +140,7 @@ export default function createApp (options) { const current = state.routes[state.index] options = { path: current.name, - query: current.params, + query: encodeObjValues(current.params), scene: 0, shareTicket: '', referrerInfo: {} diff --git a/packages/core/src/platform/patch/getDefaultOptions.ios.js b/packages/core/src/platform/patch/getDefaultOptions.ios.js index 60c3d34b83..927aa252f7 100644 --- a/packages/core/src/platform/patch/getDefaultOptions.ios.js +++ b/packages/core/src/platform/patch/getDefaultOptions.ios.js @@ -3,7 +3,7 @@ import * as ReactNative from 'react-native' import { ReactiveEffect } from '../../observer/effect' import { watch } from '../../observer/watch' import { reactive, set, del } from '../../observer/reactive' -import { hasOwn, isFunction, noop, isObject, isArray, getByPath, collectDataset, hump2dash, dash2hump, callWithErrorHandling, wrapMethodsWithErrorHandling } from '@mpxjs/utils' +import { hasOwn, isFunction, noop, isObject, isArray, getByPath, collectDataset, hump2dash, dash2hump, callWithErrorHandling, wrapMethodsWithErrorHandling, encodeObjValues } from '@mpxjs/utils' import MpxProxy from '../../core/proxy' import { BEFOREUPDATE, ONLOAD, UPDATED, ONSHOW, ONHIDE, ONRESIZE, REACTHOOKSEXEC } from '../../core/innerLifecycle' import mergeOptions from '../../core/mergeOptions' @@ -506,14 +506,8 @@ export function getDefaultOptions ({ type, rawOptions = {}, currentInject }) { if (!global.__mpxAppHotLaunched && global.__mpxAppOnLaunch) { global.__mpxAppOnLaunch(props.navigation) } - const loadParams = {} // 此处拿到的props.route.params内属性的value被进行过了一次decode, 不符合预期,此处额外进行一次encode来与微信对齐 - if (isObject(props.route.params)) { - for (const key in props.route.params) { - loadParams[key] = encodeURIComponent(props.route.params[key]) - } - } - proxy.callHook(ONLOAD, [loadParams]) + proxy.callHook(ONLOAD, [encodeObjValues(props.route.params)]) } proxy.mounted() return () => { diff --git a/packages/utils/src/url.js b/packages/utils/src/url.js index 1ae5b58117..d203c89047 100644 --- a/packages/utils/src/url.js +++ b/packages/utils/src/url.js @@ -1,4 +1,4 @@ -import { isArray, type, forEach } from './base' +import { isArray, type, forEach, isObject } from './base' function encode (val) { return encodeURIComponent(val) @@ -8,6 +8,18 @@ function decode (val) { return decodeURIComponent(val) } +function encodeObjValues (obj) { + let retObj = {} + if (isObject(obj)) { + for (const key in obj) { + retObj[key] = encodeURIComponent(obj[key]) + } + } else { + retObj = obj + } + return retObj +} + function isURLSearchParams (val) { return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams } @@ -157,5 +169,6 @@ export { parseUrl, parseQuery, parseUrlQuery, - serialize + serialize, + encodeObjValues }