From 24c0f1d7fdc396f977a7117ff0db18746226117f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=80=86=E8=91=B5?= Date: Mon, 14 Dec 2020 20:58:01 +0800 Subject: [PATCH] fix(jsx2mp): can't get correct prop value from defaultProps --- packages/jsx2mp-runtime/src/bridge.js | 5 +++-- packages/jsx2mp-runtime/src/router.js | 18 ++++++++++-------- packages/jsx2mp-runtime/src/updater.js | 7 +++++++ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/packages/jsx2mp-runtime/src/bridge.js b/packages/jsx2mp-runtime/src/bridge.js index d6663ad8..15d317f5 100644 --- a/packages/jsx2mp-runtime/src/bridge.js +++ b/packages/jsx2mp-runtime/src/bridge.js @@ -99,6 +99,7 @@ function getComponentCycles(Klass) { }); } this.instance = new Klass(props); + this.instance.defaultProps = Klass.defaultProps; this.instance._internal = this; this.instance.__injectHistory = Klass.__injectHistory; this.instance.instanceId = instanceId; @@ -410,10 +411,10 @@ function toleranceEventTimeStamp(timeStamp) { return Math.floor(timeStamp / 10) - 5; } -function generateBaseOptions(internal, defaultProps, ...restProps) { +function generateBaseOptions(internal, ...restProps) { const instanceId = getId('tag', internal); - const props = Object.assign({}, defaultProps, internal[PROPS], { + const props = Object.assign({}, internal[PROPS], { TAGID: instanceId, // In MiniApp every slot is scopedSlots $slots: { diff --git a/packages/jsx2mp-runtime/src/router.js b/packages/jsx2mp-runtime/src/router.js index a03c4cda..ebb48bfe 100644 --- a/packages/jsx2mp-runtime/src/router.js +++ b/packages/jsx2mp-runtime/src/router.js @@ -43,14 +43,16 @@ function navigateBack(options) { let __routerMap = {}; export function __updateRouterMap(appConfig) { - appConfig.routes.map(route => { - // Rule of source in appConfig differs from Quickapp's manifest - if (isQuickApp) { - __routerMap[route.path] = route.source.replace(/\/index$/, ''); - } else { - __routerMap[route.path] = route.source; - } - }); + if (appConfig.routes) { + appConfig.routes.map(route => { + // Rule of source in appConfig differs from Quickapp's manifest + if (isQuickApp) { + __routerMap[route.path] = route.source.replace(/\/index$/, ''); + } else { + __routerMap[route.path] = route.source; + } + }); + } // return as globalRoutes for Quickapp if (isQuickApp) { return __routerMap; diff --git a/packages/jsx2mp-runtime/src/updater.js b/packages/jsx2mp-runtime/src/updater.js index ebdae923..fe2d99ef 100644 --- a/packages/jsx2mp-runtime/src/updater.js +++ b/packages/jsx2mp-runtime/src/updater.js @@ -51,6 +51,13 @@ export function updateChildProps(trigger, instanceId, nextUpdateProps) { targetComponent.props, nextUpdateProps ); + const defaultProps = targetComponent.defaultProps || {}; + // Resolve default props + for (let propName in defaultProps) { + if (nextProps[propName] === undefined) { + nextProps[propName] = defaultProps[propName]; + } + } // Inject history if (targetComponent.__injectHistory) { const history = getMiniAppHistory();