Browse Source

refactor(runtime-dom): avoid form attribtue tag check

the tag check while technically stricter, is not really necessary
and introduces too much weight
Evan You 5 years ago
parent
commit
180310cbe9
2 changed files with 8 additions and 19 deletions
  1. 8 14
      packages/runtime-dom/src/patchProp.ts
  2. 0 5
      packages/shared/src/domTagConfig.ts

+ 8 - 14
packages/runtime-dom/src/patchProp.ts

@@ -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]/
@@ -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
   }
 
@@ -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
   }
 

+ 0 - 5
packages/shared/src/domTagConfig.ts

@@ -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)