Skip to content

Commit

Permalink
refactor(runtime-dom): avoid form attribtue tag check
Browse files Browse the repository at this point in the history
the tag check while technically stricter, is not really necessary
and introduces too much weight
  • Loading branch information
yyx990803 committed Feb 24, 2021
1 parent 414c265 commit 180310c
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 19 deletions.
22 changes: 8 additions & 14 deletions packages/runtime-dom/src/patchProp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +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,
isFunction,
isModelListener,
isFormTag
} from '@vue/shared'
import { isOn, isString, isFunction, isModelListener } from '@vue/shared'
import { RendererOptions } from '@vue/runtime-core'

const nativeOnRE = /^on[a-z]/
Expand Down Expand Up @@ -99,9 +93,9 @@ function shouldSetAsProp(
return false
}

// #1787, #2840 the form property is readonly and can only be set as an
// attribute using a string value
if (key === 'form' && isFormTag(el.tagName)) {
// #1787, #2840 form property on form elements is readonly and must be set as
// attribute.
if (key === 'form') {
return false
}

Expand All @@ -110,13 +104,13 @@ function shouldSetAsProp(
return false
}

// native onclick with string value, must be set as attribute
if (nativeOnRE.test(key) && isString(value)) {
// #2766 <textarea type> must be set as attribute
if (key === 'type' && el.tagName === 'TEXTAREA') {
return false
}

// DOMprop "type" is readonly on textarea elements: https://github.com/vuejs/vue-next/issues/2766
if (key === 'type' && el.tagName === 'TEXTAREA') {
// native onclick with string value, must be set as attribute
if (nativeOnRE.test(key) && isString(value)) {
return false
}

Expand Down
5 changes: 0 additions & 5 deletions packages/shared/src/domTagConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,6 @@ const SVG_TAGS =
const VOID_TAGS =
'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr'

const FORM_TAGS =
'button,datalist,fieldset,input,keygen,label,legend,meter,optgroup,option,' +
'output,progress,select,textarea'

export const isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS)
export const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS)
export const isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS)
export const isFormTag = /*#__PURE__*/ makeMap(FORM_TAGS, true)

0 comments on commit 180310c

Please sign in to comment.