From 27b2ca3a47a2f927664402a5517d7268bd57acfe Mon Sep 17 00:00:00 2001 From: mackwang Date: Thu, 21 Aug 2025 19:17:11 +0800 Subject: [PATCH 1/7] =?UTF-8?q?docs:=20=E6=96=87=E6=A1=A3=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs-vitepress/guide/platform/rn.md | 58 +++++++++++++++++++++++---- packages/core/@types/index.d.ts | 20 ---------- packages/store/@types/index.d.ts | 62 ++++++++++++++--------------- 3 files changed, 82 insertions(+), 58 deletions(-) diff --git a/docs-vitepress/guide/platform/rn.md b/docs-vitepress/guide/platform/rn.md index 1308365442..060f55ac02 100644 --- a/docs-vitepress/guide/platform/rn.md +++ b/docs-vitepress/guide/platform/rn.md @@ -310,30 +310,71 @@ env() 函数通过和 var() 函数类似形式, 区别在于:一是环境变 ### 使用RN组件 在Mpx组件内引用RN组件,采用如下方式 - **RN组件注册方式**:需在components属性下进行引用注册。 -- **RN组件的属性与事件**:属性与事件参考RN原生支持的属性与事件名,对应赋值方式按照Mpx语法进行双括号包裹,组件使用的值需要通过 REACTHOOKSEXEC方法的返回值的方式进行声明。 -- **RN组件的样式定义**: 组件支持样式属性的透传,通过在RN组件上定义styles即可透传样式 +- **RN组件的属性与事件**:属性与事件参考RN原生支持的属性与事件名,对应赋值方式按照Mpx语法进行双括号包裹,组件使用的值需要通过 onReactHooksExec 的返回值的方式进行声明。 +- **RN组件的样式定义**: 组件支持样式属性的透传,通过在RN组件上定义style即可透传样式 - **其他功能**: 支持在RN组件内使用slot -```javascript +```html + + +``` + +在选项式api中,使用 REACTHOOKSEXEC 替代 onReactHooksExec,例如 +```html ``` + + + ### 使用React hooks Mpx提供了hooks的执行机制,通过在Mpx组件内注册REACTHOOKSEXEC方法,保障RN组件的初始化执行。hooks的返回值支持数据与方法 - 模板上RN组件/Mpx组件的数据渲染 diff --git a/packages/core/@types/index.d.ts b/packages/core/@types/index.d.ts index e16b8cf00e..b3dbfb87df 100644 --- a/packages/core/@types/index.d.ts +++ b/packages/core/@types/index.d.ts @@ -356,26 +356,6 @@ export interface RnConfig { dimensions: T ) => T | void - /** - * 异步分包加载配置。 - */ - asyncChunk?: { - /** - * 加载超时时长配置,单位为毫秒。 - */ - timeout: number - - /** - * 异步分包页面加载超时或失败时,自定义兜底页面文件路径。 - */ - fallback: string - - /** - * 异步分包页面加载时,自定义 loading 页面文件路径。 - */ - loading: string - } - /** * 加载并执行异步分包的方法。 * diff --git a/packages/store/@types/index.d.ts b/packages/store/@types/index.d.ts index 2699b43e26..938738c771 100644 --- a/packages/store/@types/index.d.ts +++ b/packages/store/@types/index.d.ts @@ -1,34 +1,34 @@ import type { ComputedRef } from '@mpxjs/core' -type UnboxDepField = F extends keyof D ? D[F] : {} +export type UnboxDepField = F extends keyof D ? D[F] : {} -type GetReturnOrSelf = T extends (...args: any)=> infer R ? R : T +export type GetReturnOrSelf = T extends (...args: any)=> infer R ? R : T -interface compContext { +export interface compContext { [key: string]: any } -interface Deps { +export interface Deps { [key: string]: Store | StoreWithThis } -type UnboxDepsField = string extends keyof D ? {} : { +export type UnboxDepsField = string extends keyof D ? {} : { [K in keyof D]: UnboxDepField } -type getMutation = M extends (state: any, ...payload: infer P) => infer R ? (...payload: P) => R : never +export type getMutation = M extends (state: any, ...payload: infer P) => infer R ? (...payload: P) => R : never -type getAction = A extends (context: object, ...payload: infer P) => infer R ? (...payload: P) => R : never +export type getAction = A extends (context: object, ...payload: infer P) => infer R ? (...payload: P) => R : never -type Mutations = { +export type Mutations = { [key: string]: (this: void, state: S, ...payload: any[]) => any } -interface Getters { +export interface Getters { [key: string]: (this: void, state: S, getters: any, globalState: any) => any } -type Actions> = { +export type Actions> = { [key: string]: (this: void, context: { rootState: any, state: S, @@ -38,21 +38,21 @@ type Actions> = { }, ...payload: any[]) => any } -type GetGetters = { +export type GetGetters = { readonly [K in keyof G]: G[K] extends (state: any, getters: any, globalState: any) => infer R ? R : G[K] } -type GetMutations = { +export type GetMutations = { [K in keyof M]: getMutation } -type GetActions = { +export type GetActions = { [K in keyof A]: getAction } -type GetDispatch = keyof D extends never ? ((type: T, ...payload: A[T] extends (context: any, ...payload: infer P) => any ? P : never) => A[T] extends (context: any, ...payload: any[]) => infer R ? R : never) : ((type: string, ...payload: any[]) => any) +export type GetDispatch = keyof D extends never ? ((type: T, ...payload: A[T] extends (context: any, ...payload: infer P) => any ? P : never) => A[T] extends (context: any, ...payload: any[]) => infer R ? R : never) : ((type: string, ...payload: any[]) => any) -type GetCommit = keyof D extends never ? ((type: T, ...payload: M[T] extends (state: any, ...payload: infer P) => any ? P : never) => M[T] extends (state: any, ...payload: any[]) => infer R ? R : never) : ((type: string, ...payload: any[]) => any) +export type GetCommit = keyof D extends never ? ((type: T, ...payload: M[T] extends (state: any, ...payload: infer P) => any ? P : never) => M[T] extends (state: any, ...payload: any[]) => infer R ? R : never) : ((type: string, ...payload: any[]) => any) // do not exist in tip declare const DEPS_SYMBOL: unique symbol @@ -148,24 +148,24 @@ export type GetComputedType = { : never } -interface MutationsAndActionsWithThis { +export interface MutationsAndActionsWithThis { [key: string]: (...payload: any[]) => any } -type UnionToIntersection = (U extends any +export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never; -interface mapStateFunctionType { +export interface mapStateFunctionType { [key: string]: (state: S, getter: G) => any } -interface DeeperMutationsAndActions { +export interface DeeperMutationsAndActions { [key: string]: ((...payload: any[]) => any) | MutationsAndActionsWithThis } -interface DeeperStateAndGetters { +export interface DeeperStateAndGetters { [key: string]: any | DeeperStateAndGetters } @@ -188,17 +188,17 @@ export interface CompatibleDispatch { } // Store Type Bindings -type StringKeyof = Exclude +export type StringKeyof = Exclude -type CombineStringKey = H extends '' ? `${L}` : `${H}.${L}` +export type CombineStringKey = H extends '' ? `${L}` : `${H}.${L}` -type GetActionsKey = UnionToIntersection<{ +export type GetActionsKey = UnionToIntersection<{ [K in StringKeyof]: { [RK in CombineStringKey]: A[K] extends DeeperMutationsAndActions ? GetActionsKey : Record }[CombineStringKey] }[StringKeyof]> // {actA: () => void, storeB.actB: () => void} -type GetStateAndGettersKey = UnionToIntersection<{ +export type GetStateAndGettersKey = UnionToIntersection<{ [K in StringKeyof]: { [RK in CombineStringKey]: D[DK][T][K] } @@ -212,7 +212,7 @@ type GetStateAndGettersKey] // }[StringKeyof]> // {stateA: any, storeB.stateB: any} -type GetAllDepsType = { +export type GetAllDepsType = { [K in StringKeyof]: A[K] } & UnionToIntersection<{ [K in StringKeyof]: AK extends 'actions' | 'mutations' ? { @@ -222,12 +222,12 @@ type GetAllDepsType]: GetStateAndGettersKey[P] } : {} }[StringKeyof]> -type GetDispatchAndCommitWithThis = (>(type: T, ...payload: GetAllDepsType[T] extends (...payload: infer P) => any ? P : never) => GetAllDepsType[T] extends (...payload: any[]) => infer R ? R : never) +export type GetDispatchAndCommitWithThis = (>(type: T, ...payload: GetAllDepsType[T] extends (...payload: infer P) => any ? P : never) => GetAllDepsType[T] extends (...payload: any[]) => infer R ? R : never) // type GetAllMapKeys = GetAllDepsType & GetStateAndGettersKey -type GetAllMapKeys = GetAllDepsType // 关闭对state、getters本身传入对象的深层次推导,因为过深的递归会导致ts推导直接挂掉 +export type GetAllMapKeys = GetAllDepsType // 关闭对state、getters本身传入对象的深层次推导,因为过深的递归会导致ts推导直接挂掉 -interface StoreOptWithThis { +export interface StoreOptWithThis { state?: S getters?: G & ThisType<{ state: S & UnboxDepsField, getters: GetComputedType & UnboxDepsField, rootState: any }> mutations?: M & ThisType<{ state: S & UnboxDepsField }> @@ -242,7 +242,7 @@ interface StoreOptWithThis { modules?: Record> } -interface IStoreWithThis { +export interface IStoreWithThis { [DEPS_SYMBOL]: D [STATE_SYMBOL]: S @@ -384,9 +384,9 @@ interface IStoreWithThis { mapActionsToInstance(obj: T, context: compContext): void } -type StoreWithThis = IStoreWithThis & CompatibleDispatch +export type StoreWithThis = IStoreWithThis & CompatibleDispatch -interface StoreOpt { +export interface StoreOpt { state?: S, getters?: G mutations?: M, From 8e231abc5273d6b1d3f7b695bf9212e45ad18e7b Mon Sep 17 00:00:00 2001 From: mackwang Date: Fri, 22 Aug 2025 18:43:55 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20=E8=A1=A5=E5=85=85options.disableMe?= =?UTF-8?q?mo=E4=B8=8Ecomponents=E7=9A=84ts=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/@types/index.d.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/core/@types/index.d.ts b/packages/core/@types/index.d.ts index e16b8cf00e..b27000e13d 100644 --- a/packages/core/@types/index.d.ts +++ b/packages/core/@types/index.d.ts @@ -126,9 +126,14 @@ interface Context { type ExtendedComponentOptions = { disconnectOnUnmounted?: boolean shallowReactivePattern?: RegExp + /** + * 是否禁用render函数的useMemo,仅输出RN支持 + */ + disableMemo?: boolean } & WechatMiniprogram.Component.ComponentOptions interface ComponentOpt, S extends Record> extends Partial { + components: Record, data?: D properties?: P computed?: C From 4691fe0bcc2d0baba633135166e1653bc64ef61f Mon Sep 17 00:00:00 2001 From: mackwang112 Date: Wed, 27 Aug 2025 10:22:42 +0800 Subject: [PATCH 3/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DmpxConfig=20ts?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/@types/index.d.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core/@types/index.d.ts b/packages/core/@types/index.d.ts index 32819f423a..d42271ff66 100644 --- a/packages/core/@types/index.d.ts +++ b/packages/core/@types/index.d.ts @@ -226,7 +226,7 @@ type WxComponentIns, 'selectComponent' | 'selectAllComponents'> & ReplaceWxComponentIns -type ComponentIns = [], S extends Record = {}, O = {}> = +export type ComponentIns = [], S extends Record = {}, O = {}> = GetDataType & UnboxMixinsField & M & UnboxMixinsField & { [K in keyof S]: S[K] extends Ref ? V : S[K] } & GetPropsType

> & @@ -301,7 +301,7 @@ export interface RnConfig { * - `true`:允许退出应用 * - `false`:阻止退出应用 */ - onAppBack?: () => boolean + onAppBack?: (delta: number) => boolean /** * 是否禁用框架内部的 AppStateChange 监听。 @@ -384,10 +384,10 @@ interface MpxConfig { ignoreWarning: boolean | string | RegExp | ((msg: string, location: string, e: Error) => boolean) ignoreProxyWhiteList: Array observeClassInstance: boolean | Array - errorHandler: (msg: String, location: String, e: Error) => any | null - warnHandler: (msg: String, location: String, e: Error) => any | null - proxyEventHandler: (e: WechatMiniprogram.CustomEvent, target: ComponentIns<{}, {}, {}, {}, []>) => any | null - setDataHandler: (data: object, target: ComponentIns<{}, {}, {}, {}, []>) => any | null + errorHandler: (msg: String, location: String, e: Error) => void + warnHandler: (msg: String, location: String, e: Error) => void + proxyEventHandler: (e: WechatMiniprogram.CustomEvent, target: ComponentIns<{}, {}, {}, {}, []>) => void + setDataHandler: (data: object, target: ComponentIns<{}, {}, {}, {}, []>) => void forceFlushSync: boolean, webRouteConfig: object, webConfig: object, From 4129c2b01ecc8f3b86759a77d62ebbd4812ccb1f Mon Sep 17 00:00:00 2001 From: mackwang112 Date: Wed, 27 Aug 2025 14:12:58 +0800 Subject: [PATCH 4/7] fix: ts type --- packages/core/@types/global.d.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/core/@types/global.d.ts b/packages/core/@types/global.d.ts index 62977129aa..765512e368 100644 --- a/packages/core/@types/global.d.ts +++ b/packages/core/@types/global.d.ts @@ -11,3 +11,6 @@ declare module '*?resolve' { const resourcePath: string export default resourcePath } + +declare let setAppShow: () => void +declare let setAppHide: () => void From 6cda3a92cc0afb072e9d9d2ab2dd6784f084d556 Mon Sep 17 00:00:00 2001 From: mackwang112 Date: Thu, 28 Aug 2025 10:18:46 +0800 Subject: [PATCH 5/7] fix: store ts export --- packages/store/@types/index.d.ts | 54 ++++++++++++++++---------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/packages/store/@types/index.d.ts b/packages/store/@types/index.d.ts index 938738c771..dcf0f1cdcf 100644 --- a/packages/store/@types/index.d.ts +++ b/packages/store/@types/index.d.ts @@ -1,34 +1,34 @@ import type { ComputedRef } from '@mpxjs/core' -export type UnboxDepField = F extends keyof D ? D[F] : {} +type UnboxDepField = F extends keyof D ? D[F] : {} -export type GetReturnOrSelf = T extends (...args: any)=> infer R ? R : T +type GetReturnOrSelf = T extends (...args: any)=> infer R ? R : T export interface compContext { [key: string]: any } -export interface Deps { +interface Deps { [key: string]: Store | StoreWithThis } -export type UnboxDepsField = string extends keyof D ? {} : { +type UnboxDepsField = string extends keyof D ? {} : { [K in keyof D]: UnboxDepField } -export type getMutation = M extends (state: any, ...payload: infer P) => infer R ? (...payload: P) => R : never +type getMutation = M extends (state: any, ...payload: infer P) => infer R ? (...payload: P) => R : never -export type getAction = A extends (context: object, ...payload: infer P) => infer R ? (...payload: P) => R : never +type getAction = A extends (context: object, ...payload: infer P) => infer R ? (...payload: P) => R : never -export type Mutations = { +type Mutations = { [key: string]: (this: void, state: S, ...payload: any[]) => any } -export interface Getters { +interface Getters { [key: string]: (this: void, state: S, getters: any, globalState: any) => any } -export type Actions> = { +type Actions> = { [key: string]: (this: void, context: { rootState: any, state: S, @@ -38,21 +38,21 @@ export type Actions> = { }, ...payload: any[]) => any } -export type GetGetters = { +type GetGetters = { readonly [K in keyof G]: G[K] extends (state: any, getters: any, globalState: any) => infer R ? R : G[K] } -export type GetMutations = { +type GetMutations = { [K in keyof M]: getMutation } -export type GetActions = { +type GetActions = { [K in keyof A]: getAction } -export type GetDispatch = keyof D extends never ? ((type: T, ...payload: A[T] extends (context: any, ...payload: infer P) => any ? P : never) => A[T] extends (context: any, ...payload: any[]) => infer R ? R : never) : ((type: string, ...payload: any[]) => any) +type GetDispatch = keyof D extends never ? ((type: T, ...payload: A[T] extends (context: any, ...payload: infer P) => any ? P : never) => A[T] extends (context: any, ...payload: any[]) => infer R ? R : never) : ((type: string, ...payload: any[]) => any) -export type GetCommit = keyof D extends never ? ((type: T, ...payload: M[T] extends (state: any, ...payload: infer P) => any ? P : never) => M[T] extends (state: any, ...payload: any[]) => infer R ? R : never) : ((type: string, ...payload: any[]) => any) +type GetCommit = keyof D extends never ? ((type: T, ...payload: M[T] extends (state: any, ...payload: infer P) => any ? P : never) => M[T] extends (state: any, ...payload: any[]) => infer R ? R : never) : ((type: string, ...payload: any[]) => any) // do not exist in tip declare const DEPS_SYMBOL: unique symbol @@ -148,11 +148,11 @@ export type GetComputedType = { : never } -export interface MutationsAndActionsWithThis { +interface MutationsAndActionsWithThis { [key: string]: (...payload: any[]) => any } -export type UnionToIntersection = (U extends any +type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I @@ -161,11 +161,11 @@ export type UnionToIntersection = (U extends any export interface mapStateFunctionType { [key: string]: (state: S, getter: G) => any } -export interface DeeperMutationsAndActions { +interface DeeperMutationsAndActions { [key: string]: ((...payload: any[]) => any) | MutationsAndActionsWithThis } -export interface DeeperStateAndGetters { +interface DeeperStateAndGetters { [key: string]: any | DeeperStateAndGetters } @@ -188,17 +188,17 @@ export interface CompatibleDispatch { } // Store Type Bindings -export type StringKeyof = Exclude +type StringKeyof = Exclude -export type CombineStringKey = H extends '' ? `${L}` : `${H}.${L}` +type CombineStringKey = H extends '' ? `${L}` : `${H}.${L}` -export type GetActionsKey = UnionToIntersection<{ +type GetActionsKey = UnionToIntersection<{ [K in StringKeyof]: { [RK in CombineStringKey]: A[K] extends DeeperMutationsAndActions ? GetActionsKey : Record }[CombineStringKey] }[StringKeyof]> // {actA: () => void, storeB.actB: () => void} -export type GetStateAndGettersKey = UnionToIntersection<{ +type GetStateAndGettersKey = UnionToIntersection<{ [K in StringKeyof]: { [RK in CombineStringKey]: D[DK][T][K] } @@ -212,7 +212,7 @@ export type GetStateAndGettersKey] // }[StringKeyof]> // {stateA: any, storeB.stateB: any} -export type GetAllDepsType = { +type GetAllDepsType = { [K in StringKeyof]: A[K] } & UnionToIntersection<{ [K in StringKeyof]: AK extends 'actions' | 'mutations' ? { @@ -222,12 +222,12 @@ export type GetAllDepsType]: GetStateAndGettersKey[P] } : {} }[StringKeyof]> -export type GetDispatchAndCommitWithThis = (>(type: T, ...payload: GetAllDepsType[T] extends (...payload: infer P) => any ? P : never) => GetAllDepsType[T] extends (...payload: any[]) => infer R ? R : never) +type GetDispatchAndCommitWithThis = (>(type: T, ...payload: GetAllDepsType[T] extends (...payload: infer P) => any ? P : never) => GetAllDepsType[T] extends (...payload: any[]) => infer R ? R : never) // type GetAllMapKeys = GetAllDepsType & GetStateAndGettersKey -export type GetAllMapKeys = GetAllDepsType // 关闭对state、getters本身传入对象的深层次推导,因为过深的递归会导致ts推导直接挂掉 +type GetAllMapKeys = GetAllDepsType // 关闭对state、getters本身传入对象的深层次推导,因为过深的递归会导致ts推导直接挂掉 -export interface StoreOptWithThis { +interface StoreOptWithThis { state?: S getters?: G & ThisType<{ state: S & UnboxDepsField, getters: GetComputedType & UnboxDepsField, rootState: any }> mutations?: M & ThisType<{ state: S & UnboxDepsField }> @@ -386,7 +386,7 @@ export interface IStoreWithThis = IStoreWithThis & CompatibleDispatch -export interface StoreOpt { +interface StoreOpt { state?: S, getters?: G mutations?: M, From b89521623d7b7e214482527225f550834258307b Mon Sep 17 00:00:00 2001 From: mackwang112 Date: Thu, 28 Aug 2025 10:58:28 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix:=20core=20devDependencies=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0@types/react=E3=80=81react-native?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/@types/index.d.ts | 6 +++++- packages/core/package.json | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/core/@types/index.d.ts b/packages/core/@types/index.d.ts index d42271ff66..255a61d0ad 100644 --- a/packages/core/@types/index.d.ts +++ b/packages/core/@types/index.d.ts @@ -9,6 +9,7 @@ import type { GetComputedType } from '@mpxjs/store' import type { ScaledSize } from 'react-native' +import type { ComponentType } from 'react' export * from '@mpxjs/store' // utils @@ -133,7 +134,10 @@ type ExtendedComponentOptions = { } & WechatMiniprogram.Component.ComponentOptions interface ComponentOpt, S extends Record> extends Partial { - components: Record, + /** + * ReactNative 原生组件注册 + */ + components?: Record, data?: D properties?: P computed?: C diff --git a/packages/core/package.json b/packages/core/package.json index 8774e1c805..3bbe696efb 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -93,6 +93,10 @@ "optional": true } }, + "devDependencies": { + "@types/react": "^18.2.79", + "react-native": "^0.74.5" + }, "publishConfig": { "registry": "https://registry.npmjs.org", "access": "public" From 61615f0336840c2561b91b391781607d05d8ad95 Mon Sep 17 00:00:00 2001 From: mackwang112 Date: Thu, 25 Sep 2025 14:23:28 +0800 Subject: [PATCH 7/7] =?UTF-8?q?fix:=20RnConfig=20=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/@types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/@types/index.d.ts b/packages/core/@types/index.d.ts index 255a61d0ad..ca525742dd 100644 --- a/packages/core/@types/index.d.ts +++ b/packages/core/@types/index.d.ts @@ -402,7 +402,7 @@ interface MpxConfig { */ webviewConfig: WebviewConfig, /** react-native 相关配置,用于挂载事件等,如 onShareAppMessage */ - rnConfig?: RnConfig, + rnConfig: RnConfig, } type SupportedMode = 'wx' | 'ali' | 'qq' | 'swan' | 'tt' | 'web' | 'qa'