expect(proxy.foo).toBe(2)
expect(proxy.bar).toEqual({ a: 1 })
- render(h(Comp, { foo: undefined, bar: { b: 2 } }), root)
+ render(h(Comp, { bar: { b: 2 } }), root)
expect(proxy.foo).toBe(1)
expect(proxy.bar).toEqual({ b: 2 })
+
+ render(h(Comp, { foo: 3, bar: { b: 3 } }), root)
+ expect(proxy.foo).toBe(3)
+ expect(proxy.bar).toEqual({ b: 3 })
+
+ render(h(Comp, { bar: { b: 4 } }), root)
+ expect(proxy.foo).toBe(1)
+ expect(proxy.bar).toEqual({ b: 4 })
})
test('optimized props updates', async () => {
// and converted to camelCase (#955)
((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey)))
) {
- delete props[key]
+ if (options) {
+ props[key] = resolvePropValue(
+ options,
+ rawProps || EMPTY_OBJ,
+ key,
+ undefined
+ )
+ } else {
+ delete props[key]
+ }
}
}
for (const key in attrs) {
key: string,
value: unknown
) {
- let opt = options[key]
- if (opt == null) {
- return value
- }
- const hasDefault = hasOwn(opt, 'default')
- // default values
- if (hasDefault && value === undefined) {
- const defaultValue = opt.default
- value = isFunction(defaultValue) ? defaultValue() : defaultValue
- }
- // boolean casting
- if (opt[BooleanFlags.shouldCast]) {
- if (!hasOwn(props, key) && !hasDefault) {
- value = false
- } else if (
- opt[BooleanFlags.shouldCastTrue] &&
- (value === '' || value === hyphenate(key))
- ) {
- value = true
+ const opt = options[key]
+ if (opt != null) {
+ const hasDefault = hasOwn(opt, 'default')
+ // default values
+ if (hasDefault && value === undefined) {
+ const defaultValue = opt.default
+ value = isFunction(defaultValue) ? defaultValue() : defaultValue
+ }
+ // boolean casting
+ if (opt[BooleanFlags.shouldCast]) {
+ if (!hasOwn(props, key) && !hasDefault) {
+ value = false
+ } else if (
+ opt[BooleanFlags.shouldCastTrue] &&
+ (value === '' || value === hyphenate(key))
+ ) {
+ value = true
+ }
}
}
return value