]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
perf(runtime-core): use raw context on component options init
authorEvan You <yyx990803@gmail.com>
Thu, 16 Apr 2020 14:39:51 +0000 (10:39 -0400)
committerEvan You <yyx990803@gmail.com>
Thu, 16 Apr 2020 14:39:51 +0000 (10:39 -0400)
packages/runtime-core/__tests__/apiOptions.spec.ts
packages/runtime-core/src/componentOptions.ts

index 836373c7053506bfdff7fc946bc92db798f20b4d..65115804ad4dfde29df0b8ce70bda5c75b2a4c86 100644 (file)
@@ -627,7 +627,7 @@ describe('api: options', () => {
       render(h(Comp), root)
       instance.foo = 1
       expect(
-        'Computed property "foo" was assigned to but it has no setter.'
+        'Write operation failed: computed property "foo" is readonly'
       ).toHaveBeenWarned()
     })
 
index 31bb01ad0efa9978ab5c415fc84af8bdf11d177e..20c99a717ed5017b8c305b60aa7360b0c2327d20 100644 (file)
@@ -40,7 +40,8 @@ import {
   reactive,
   ComputedGetter,
   WritableComputedOptions,
-  ComputedRef
+  ComputedRef,
+  toRaw
 } from '@vue/reactivity'
 import {
   ComponentObjectPropsOptions,
@@ -276,11 +277,12 @@ export function applyOptions(
     errorCaptured
   } = options
 
-  const renderContext =
+  const renderContext = toRaw(
     instance.renderContext === EMPTY_OBJ &&
     (computedOptions || methods || watchOptions || injectOptions)
       ? (instance.renderContext = reactive({}))
       : instance.renderContext
+  )
 
   const globalMixins = instance.appContext.mixins
   // call it only during dev
@@ -355,7 +357,7 @@ export function applyOptions(
               : __DEV__
                 ? () => {
                     warn(
-                      `Computed property "${key}" was assigned to but it has no setter.`
+                      `Write operation failed: computed property "${key}" is readonly.`
                     )
                   }
                 : NOOP
@@ -369,7 +371,9 @@ export function applyOptions(
         if (renderContext[key] && !(key in proxyTarget)) {
           Object.defineProperty(proxyTarget, key, {
             enumerable: true,
-            get: () => (renderContext[key] as ComputedRef).value
+            configurable: true,
+            get: () => (renderContext[key] as ComputedRef).value,
+            set: NOOP
           })
         }
       }