fix(core): propsProxy should not convert non-reactive nested values

This commit is contained in:
Evan You
2019-12-02 14:11:12 -05:00
parent ac51f129ea
commit 57bbbb227c
6 changed files with 40 additions and 39 deletions

View File

@@ -1,5 +1,5 @@
import { VNode, VNodeChild, isVNode } from './vnode'
import { ReactiveEffect, reactive, readonlyProps } from '@vue/reactivity'
import { ReactiveEffect, reactive, shallowReadonly } from '@vue/reactivity'
import {
PublicInstanceProxyHandlers,
ComponentPublicInstance
@@ -269,7 +269,7 @@ export function setupStatefulComponent(
// 2. create props proxy
// the propsProxy is a reactive AND readonly proxy to the actual props.
// it will be updated in resolveProps() on updates before render
const propsProxy = (instance.propsProxy = readonlyProps(instance.props))
const propsProxy = (instance.propsProxy = shallowReadonly(instance.props))
// 3. call setup()
const { setup } = Component
if (setup) {

View File

@@ -14,7 +14,6 @@ import { ShapeFlags } from './shapeFlags'
import { handleError, ErrorCodes } from './errorHandling'
import { PatchFlags, EMPTY_OBJ } from '@vue/shared'
import { warn } from './warning'
import { readonlyProps } from '@vue/reactivity'
// mark the current rendering instance for asset resolution (e.g.
// resolveComponent, resolveDirective) during render
@@ -53,15 +52,14 @@ export function renderComponentRoot(
} else {
// functional
const render = Component as FunctionalComponent
const propsToPass = __DEV__ ? readonlyProps(props) : props
result = normalizeVNode(
render.length > 1
? render(propsToPass, {
? render(props, {
attrs,
slots,
emit
})
: render(propsToPass, null as any /* we know it doesn't need it */)
: render(props, null as any /* we know it doesn't need it */)
)
}