]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor: revert render fn signature
authorEvan You <yyx990803@gmail.com>
Thu, 4 Oct 2018 20:44:23 +0000 (16:44 -0400)
committerEvan You <yyx990803@gmail.com>
Thu, 4 Oct 2018 20:44:23 +0000 (16:44 -0400)
packages/core/src/component.ts
packages/core/src/componentOptions.ts
packages/core/src/componentUtils.ts
packages/core/src/createRenderer.ts
packages/core/src/optional/asyncComponent.ts
packages/core/src/optional/context.ts
packages/core/src/optional/keepAlive.ts

index b010e83627e50e46cfe89a9c27e2823971ac7579..b6500bf735778a2f805d5c927da9fdd35c8dc3b3 100644 (file)
@@ -1,13 +1,10 @@
 import { EMPTY_OBJ } from './utils'
-import { createElement } from './h'
 import { VNode, Slots, RenderNode, MountedVNode } from './vdom'
 import {
   Data,
-  RenderFunction,
   ComponentOptions,
   ComponentPropsOptions,
-  WatchOptions,
-  RenderContext
+  WatchOptions
 } from './componentOptions'
 import { setupWatcher } from './componentWatch'
 import { Autorun, DebuggerEvent, ComputedGetter } from '@vue/observer'
@@ -16,6 +13,12 @@ import { ErrorTypes } from './errorHandling'
 
 type Flatten<T> = { [K in keyof T]: T[K] }
 
+export type RenderFunction<P = Data> = (
+  props: P,
+  slots: Slots,
+  attrs: Data
+) => any
+
 export interface ComponentClass extends Flatten<typeof InternalComponent> {
   new <D = Data, P = Data>(): D & P & MountedComponent<D, P>
 }
@@ -42,7 +45,7 @@ export interface MountedComponent<D = Data, P = Data>
   $children: MountedComponent[]
   $options: ComponentOptions<D, P>
 
-  render(h: createElement, ctx: RenderContext<P>): any
+  render(props: P, slots: Slots, attrs: Data): any
   renderError?(e: Error): any
   renderTracked?(e: DebuggerEvent): void
   renderTriggered?(e: DebuggerEvent): void
index 800ce63b23c98943ba0349f94d2c4f1d88e8ad86..5723d10e8ddfd6888e921fd3259acbc894c47524 100644 (file)
@@ -1,19 +1,7 @@
-import { createElement } from './h'
-import { Slots } from './vdom'
-import { MountedComponent } from './component'
+import { MountedComponent, RenderFunction } from './component'
 
 export type Data = Record<string, any>
 
-export interface RenderContext<P> {
-  props: P
-  slots: Slots
-  attrs: Data
-}
-
-export interface RenderFunction<P = Data> {
-  (h: createElement, ctx: RenderContext<P>): any
-}
-
 export interface ComponentOptions<D = Data, P = Data> {
   data?: () => Partial<D>
   props?: ComponentPropsOptions<P>
index 2c747a7f7bb6bed4f56fb92adf1a4ea249146e44..443469707e37a36443429f77cf5a3f7657ff3664 100644 (file)
@@ -179,7 +179,12 @@ export function createComponentClassFromOptions(
   for (const key in options) {
     const value = options[key]
     if (typeof value === 'function') {
-      ;(ObjectComponent.prototype as any)[key] = value
+      ;(ObjectComponent.prototype as any)[key] =
+        key === 'render'
+          ? function() {
+              return value.call(this, h)
+            }
+          : value
     }
     if (key === 'computed') {
       const isGet = typeof value === 'function'
index c42a217a51e7a77cc3f5df738cba2f5464116b7b..ee3dd6ee0f65b6a959eefb33fe4841343b92a009 100644 (file)
@@ -1,4 +1,3 @@
-import { h } from './h'
 import { autorun, stop } from '@vue/observer'
 import { queueJob } from '@vue/scheduler'
 import { VNodeFlags, ChildrenFlags } from './flags'
@@ -238,11 +237,7 @@ export function createRenderer(options: RendererOptions) {
     const render = tag as FunctionalComponent
     const { props, attrs } = resolveProps(data, render.props)
     const subTree = (vnode.children = normalizeComponentRoot(
-      render(h, {
-        props,
-        slots: slots || EMPTY_OBJ,
-        attrs: attrs || EMPTY_OBJ
-      }),
+      render(props, slots || EMPTY_OBJ, attrs || EMPTY_OBJ),
       vnode,
       attrs,
       render.inheritAttrs
@@ -530,11 +525,7 @@ export function createRenderer(options: RendererOptions) {
     if (shouldUpdate) {
       const { props, attrs } = resolveProps(nextData, render.props)
       const nextTree = (nextVNode.children = normalizeComponentRoot(
-        render(h, {
-          props,
-          slots: nextSlots || EMPTY_OBJ,
-          attrs: attrs || EMPTY_OBJ
-        }),
+        render(props, nextSlots || EMPTY_OBJ, attrs || EMPTY_OBJ),
         nextVNode,
         attrs,
         render.inheritAttrs
@@ -1200,10 +1191,12 @@ export function createRenderer(options: RendererOptions) {
           instance.$vnode = renderInstanceRoot(instance) as MountedVNode
           mount(instance.$vnode, container, instance, isSVG, endNode)
           parentVNode.el = instance.$vnode.el
+
           if (__DEV__) {
             // expose __vue__ for devtools
             ;(parentVNode.el as any).__vue__ = instance
           }
+
           instance._mounted = true
           mountComponentInstanceCallbacks(instance, parentVNode.ref)
         }
index 1267fa3fd91dc278b9b3569b9b26a935a1d55c4a..752035a3a7d02e062debd1bc87f74a9f9a6fb2ce 100644 (file)
@@ -77,7 +77,7 @@ export function createAsyncComponent(
       }
     }
 
-    render(_: any, { props, slots }: { props: any; slots: Slots }) {
+    render(props: any, slots: Slots) {
       if (this.err || (this.timedOut && !this.comp)) {
         const error =
           this.err || new Error(`Async component timed out after ${timeout}ms.`)
index 59793040264ec9a77c33211d985ba7023ca0970b..0906d9d3bcaf34b151d478f9acb5f21b5b8662b6 100644 (file)
@@ -31,7 +31,7 @@ export class Provide extends Component {
   beforeUpdate() {
     this.updateValue()
   }
-  render(_: any, { slots }: { slots: Slots }) {
+  render(props: any, slots: Slots) {
     return slots.default && slots.default()
   }
 }
@@ -49,7 +49,7 @@ Provide.options = {
 }
 
 export class Inject extends Component {
-  render(_: any, { props, slots }: { props: any; slots: Slots }) {
+  render(props: any, slots: Slots) {
     return slots.default && slots.default(contextStore[props.id])
   }
 }
index 10eef597080e7e4c0551b137b7c5ad7288e43033..00d1aa182d3463cebce35c8d02bb9db17dd71381 100644 (file)
@@ -49,7 +49,7 @@ export class KeepAlive extends Component<{}, KeepAliveProps> {
     this.keys.delete(key)
   }
 
-  render(_: any, { props, slots }: { props: KeepAliveProps; slots: Slots }) {
+  render(props: KeepAliveProps, slots: Slots) {
     if (!slots.default) {
       return
     }