Kaynağa Gözat

feat: clone observable data instead of warning

Evan You 7 yıl önce
ebeveyn
işleme
3c49b30e17
1 değiştirilmiş dosya ile 5 ekleme ve 6 silme
  1. 5 6
      packages/core/src/h.ts

+ 5 - 6
packages/core/src/h.ts

@@ -9,7 +9,7 @@ import {
   createFragment,
   createFragment,
   createPortal
   createPortal
 } from './vdom'
 } from './vdom'
-import { isObservable } from '@vue/observer'
+import { isObservable, unwrap } from '@vue/observer'
 
 
 export const Fragment = Symbol()
 export const Fragment = Symbol()
 export const Portal = Symbol()
 export const Portal = Symbol()
@@ -43,11 +43,10 @@ export const h = ((tag: ElementType, data?: any, children?: any): VNode => {
   if (data === void 0) data = null
   if (data === void 0) data = null
   if (children === void 0) children = null
   if (children === void 0) children = null
 
 
-  if (__DEV__ && isObservable(data)) {
-    console.warn(
-      `Do not used observed state as VNode data - always create fresh objects.`,
-      data
-    )
+  // if value is observable, create a clone of original
+  // so that we can mutate it later on.
+  if (isObservable(data)) {
+    data = Object.assign({}, unwrap(data))
   }
   }
 
 
   let key = null
   let key = null