PatchFlags,
ShapeFlags,
isModelListener,
+ isObject,
isOn,
looseEqual,
} from '@vue/shared'
for (let i = 0; i < dynamicProps.length; i++) {
const key = dynamicProps[i]
if (
- !looseEqual(nextProps![key], prevProps![key]) &&
+ hasPropValueChanged(nextProps!, prevProps!, key) &&
!isEmitListener(emits, key)
) {
return true
for (let i = 0; i < nextKeys.length; i++) {
const key = nextKeys[i]
if (
- !looseEqual(nextProps[key], prevProps[key]) &&
+ hasPropValueChanged(nextProps, prevProps, key) &&
!isEmitListener(emitsOptions, key)
) {
return true
return false
}
+function hasPropValueChanged(
+ nextProps: Data,
+ prevProps: Data,
+ key: string,
+): boolean {
+ const nextProp = nextProps[key]
+ const prevProp = prevProps[key]
+ if (key === 'style' && isObject(nextProp) && isObject(prevProp)) {
+ return !looseEqual(nextProp, prevProp)
+ }
+ return nextProp !== prevProp
+}
+
export function updateHOCHostEl(
{ vnode, parent }: ComponentInternalInstance,
el: typeof vnode.el, // HostNode