@@ -253,13 +253,9 @@ function _renderToString(vnode, context, opts, inner, isSvgMode, selectValue) {
253253 name = 'class' ;
254254 } else if ( isSvgMode && name . match ( / ^ x l i n k : ? ./ ) ) {
255255 name = name . toLowerCase ( ) . replace ( / ^ x l i n k : ? / , 'xlink:' ) ;
256- } else if ( DASHED_ATTRS . test ( name ) ) {
257- name = name . replace ( / ( [ A - Z ] ) / g, ( l ) => '-' + l . toLowerCase ( ) ) ;
258- } else if ( ! CAMEL_ATTRS . test ( name ) ) {
259- name = name . toLowerCase ( ) ;
260256 }
261257
262- if ( name === 'htmlfor ' ) {
258+ if ( name === 'htmlFor ' ) {
263259 if ( props . for ) continue ;
264260 name = 'for' ;
265261 }
@@ -282,7 +278,7 @@ function _renderToString(vnode, context, opts, inner, isSvgMode, selectValue) {
282278 continue ;
283279 }
284280
285- if ( name === 'dangerouslysetinnerhtml ' ) {
281+ if ( name === 'dangerouslySetInnerHTML ' ) {
286282 html = v && v . __html ;
287283 } else if ( nodeName === 'textarea' && name === 'value' ) {
288284 // <textarea value="a&b"> --> <textarea>a&b</textarea>
@@ -305,6 +301,14 @@ function _renderToString(vnode, context, opts, inner, isSvgMode, selectValue) {
305301 s += ` selected` ;
306302 }
307303 }
304+
305+ // Convert attribute names to proper html casing
306+ if ( DASHED_ATTRS . test ( name ) ) {
307+ name = name . replace ( / ( [ A - Z ] ) / g, ( l ) => '-' + l . toLowerCase ( ) ) ;
308+ } else if ( ! CAMEL_ATTRS . test ( name ) ) {
309+ name = name . toLowerCase ( ) ;
310+ }
311+
308312 s += ` ${ name } ="${ encodeEntities ( v ) } "` ;
309313 }
310314 }
0 commit comments