refactor(runtime-dom): avoid form attribtue tag check
the tag check while technically stricter, is not really necessary and introduces too much weight
This commit is contained in:
		
							parent
							
								
									414c265dd9
								
							
						
					
					
						commit
						180310cbe9
					
				| @ -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,15 +104,15 @@ function shouldSetAsProp( | ||||
|     return false | ||||
|   } | ||||
| 
 | ||||
|   // #2766 <textarea type> must be set as attribute
 | ||||
|   if (key === 'type' && el.tagName === 'TEXTAREA') { | ||||
|     return false | ||||
|   } | ||||
| 
 | ||||
|   // native onclick with string value, must be set as attribute
 | ||||
|   if (nativeOnRE.test(key) && isString(value)) { | ||||
|     return false | ||||
|   } | ||||
| 
 | ||||
|   // DOMprop "type" is readonly on textarea elements: https://github.com/vuejs/vue-next/issues/2766
 | ||||
|   if (key === 'type' && el.tagName === 'TEXTAREA') { | ||||
|     return false | ||||
|   } | ||||
| 
 | ||||
|   return key in el | ||||
| } | ||||
|  | ||||
| @ -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) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user