]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
feat: enable returning observable state from hooks()
authorEvan You <yyx990803@gmail.com>
Tue, 30 Oct 2018 04:33:45 +0000 (00:33 -0400)
committerEvan You <yyx990803@gmail.com>
Tue, 30 Oct 2018 04:33:45 +0000 (00:33 -0400)
packages/runtime-core/src/componentProxy.ts
packages/runtime-core/src/componentUtils.ts

index 92525a208851f10531b17707b3604029369c6b9b..43be11369c0801cecf215bcdfd5206e2a1641feb 100644 (file)
@@ -74,6 +74,10 @@ const renderProxyHandlers = {
     if ((i = target._rawData) !== null && i.hasOwnProperty(key)) {
       target.$data[key] = value
       return true
+    } else if ((i = target._hookProps) !== null && i.hasOwnProperty(key)) {
+      // this enables returning observable objects from hooks()
+      i[key] = value
+      return true
     } else {
       return Reflect.set(target, key, value, receiver)
     }
index 783fd6ed019f07dbe72f2279dc76b6deceabb1ba..88a425006ffe7449a0e22e221d6ae79f313e14e0 100644 (file)
@@ -105,22 +105,24 @@ export let isRendering = false
 
 export function renderInstanceRoot(instance: ComponentInstance): VNode {
   let vnode
+  const {
+    $options: { hooks },
+    render,
+    $proxy,
+    $props,
+    $slots,
+    $attrs,
+    $parentVNode
+  } = instance
   try {
     setCurrentInstance(instance)
-    if (instance.hooks) {
-      instance._hookProps =
-        instance.hooks.call(instance.$proxy, instance.$props) || null
+    if (hooks) {
+      instance._hookProps = hooks.call($proxy, $props) || null
     }
     if (__DEV__) {
       isRendering = true
     }
-    vnode = instance.render.call(
-      instance.$proxy,
-      instance.$props,
-      instance.$slots,
-      instance.$attrs,
-      instance.$parentVNode
-    )
+    vnode = render.call($proxy, $props, $slots, $attrs, $parentVNode)
     if (__DEV__) {
       isRendering = false
     }
@@ -128,7 +130,7 @@ export function renderInstanceRoot(instance: ComponentInstance): VNode {
   } catch (err) {
     handleError(err, instance, ErrorTypes.RENDER)
   }
-  return normalizeComponentRoot(vnode, instance.$parentVNode)
+  return normalizeComponentRoot(vnode, $parentVNode)
 }
 
 export function renderFunctionalRoot(vnode: VNode): VNode {