fix(runtime-dom): should patch svg innerHtml (#956)

This commit is contained in:
likui
2020-04-14 00:13:37 +08:00
committed by GitHub
parent 33ccfc0a8b
commit 27b5c71944
2 changed files with 27 additions and 5 deletions

View File

@@ -3,7 +3,7 @@ import { patchStyle } from './modules/style'
import { patchAttr } from './modules/attrs'
import { patchDOMProp } from './modules/props'
import { patchEvent } from './modules/events'
import { isOn, isString } from '@vue/shared'
import { isOn, isString, isFunction } from '@vue/shared'
import { RendererOptions } from '@vue/runtime-core'
const nativeOnRE = /^on[a-z]/
@@ -34,10 +34,16 @@ export const patchProp: RendererOptions<Node, Element>['patchProp'] = (
patchEvent(el, key, prevValue, nextValue, parentComponent)
}
} else if (
!isSVG &&
key in el &&
// onclick="foo" needs to be set as an attribute to work
!(nativeOnRE.test(key) && isString(nextValue))
isSVG
? // most keys must be set as attribute on svg elements to work
// ...except innerHTML
key === 'innerHTML' ||
// or native onclick with function values
(key in el && nativeOnRE.test(key) && isFunction(nextValue))
: // for normal html elements, set as a property if it exists
key in el &&
// except native onclick with string values
!(nativeOnRE.test(key) && isString(nextValue))
) {
patchDOMProp(
el,