@@ -861,8 +861,6 @@ function observe (value, asRootData, key) {
861861 ! value . _isVue
862862 ) {
863863 ob = new Observer ( value , key ) ;
864- ob . __keyPath = ob . __keyPath ? ob . __keyPath : { } ;
865- ob . __keyPath [ key ] = true ;
866864 }
867865 if ( asRootData && ob ) {
868866 ob . vmCount ++ ;
@@ -926,8 +924,15 @@ function defineReactive$$1 (
926924 }
927925 childOb = ! shallow && observe ( newVal , undefined , key ) ;
928926 dep . notify ( ) ;
929- obj . __keyPath = obj . __keyPath ? obj . __keyPath : { } ;
927+
928+ if ( ! obj . __keyPath ) {
929+ def ( obj , '__keyPath' , { } , false ) ;
930+ }
930931 obj . __keyPath [ key ] = true ;
932+ if ( newVal instanceof Object && ! ( newVal instanceof Array ) ) {
933+ // 标记是否是通过this.Obj = {} 赋值印发的改动,解决少更新问题#1305
934+ def ( newVal , '__newReference' , true , false ) ;
935+ }
931936 }
932937 } ) ;
933938}
@@ -962,7 +967,7 @@ function set (target, key, val) {
962967 defineReactive$$1 ( ob . value , key , val ) ;
963968 // Vue.set 添加对象属性,渲染时候把 val 传给小程序渲染
964969 if ( ! target . __keyPath ) {
965- target . __keyPath = { } ;
970+ def ( target , ' __keyPath' , { } , false ) ;
966971 }
967972 target . __keyPath [ key ] = true ;
968973 ob . dep . notify ( ) ;
@@ -993,7 +998,7 @@ function del (target, key) {
993998 return
994999 }
9951000 if ( ! target . __keyPath ) {
996- target . __keyPath = { } ;
1001+ def ( target , ' __keyPath' , { } , false ) ;
9971002 }
9981003 // Vue.del 删除对象属性,渲染时候把这个属性设置为 undefined
9991004 target . __keyPath [ key ] = 'del' ;
@@ -4180,7 +4185,7 @@ Object.defineProperty(Vue$3.prototype, '$ssrContext', {
41804185} ) ;
41814186
41824187Vue$3 . version = '2.4.1' ;
4183- Vue$3 . mpvueVersion = '1.1.1 ' ;
4188+ Vue$3 . mpvueVersion = '1.0.20 ' ;
41844189
41854190/* globals renderer */
41864191
@@ -5396,7 +5401,7 @@ function minifyDeepData (rootKey, originKey, vmData, data, _mpValueSet, vm) {
53965401 } else {
53975402 // Object
53985403 var _keyPathOnThis = { } ; // 存储这层对象的keyPath
5399- if ( vmData . __keyPath ) {
5404+ if ( vmData . __keyPath && ! vmData . __newReference ) {
54005405 // 有更新列表 ,按照更新列表更新
54015406 _keyPathOnThis = vmData . __keyPath ;
54025407 Object . keys ( vmData ) . forEach ( function ( _key ) {
@@ -5424,6 +5429,8 @@ function minifyDeepData (rootKey, originKey, vmData, data, _mpValueSet, vm) {
54245429 // 没有更新列表
54255430 compareAndSetDeepData ( rootKey + '.' + originKey , vmData , vm , data ) ;
54265431 }
5432+ // 标记是否是通过this.Obj = {} 赋值印发的改动,解决少更新问题#1305
5433+ vmData . __newReference = false ;
54275434 }
54285435 } catch ( e ) {
54295436 console . log ( e , rootKey , originKey , vmData , data ) ;
@@ -5477,7 +5484,6 @@ function diffData (vm, data) {
54775484 Object . keys ( vmProps ) . forEach ( function ( vmPropsItemKey ) {
54785485 if ( vmProps [ vmPropsItemKey ] instanceof Object ) {
54795486 // 引用类型
5480- if ( vmPropsItemKey === '__keyPath' ) { return }
54815487 minifyDeepData ( rootKey , vmPropsItemKey , vmProps [ vmPropsItemKey ] , data , vm . _mpValueSet , vm ) ;
54825488 } else if ( vmProps [ vmPropsItemKey ] !== undefined ) {
54835489 data [ rootKey + '.' + vmPropsItemKey ] = vmProps [ vmPropsItemKey ] ;
0 commit comments