1
- import { Attributes , DOM , IFiber } from ' ./type'
2
- import { LANE } from ' ./reconciler'
1
+ import { Attributes , DOM , IFiber } from " ./type"
2
+ import { isStr , LANE } from " ./reconciler"
3
3
4
4
export const updateElement = < P extends Attributes > (
5
5
dom : DOM ,
@@ -10,19 +10,23 @@ export const updateElement = <P extends Attributes>(
10
10
let oldValue = oldProps [ name ]
11
11
let newValue = newProps [ name ]
12
12
13
- if ( oldValue === newValue || name === 'children' ) {
14
- } else if ( name === 'style' ) {
15
- for ( const k in { ...oldValue , ...newValue } ) {
16
- if ( ! ( oldValue && newValue && oldValue [ k ] === newValue [ k ] ) ) {
17
- ; ( dom as any ) [ name ] [ k ] = newValue ?. [ k ] || ''
13
+ if ( oldValue === newValue || name === "children" ) {
14
+ } else if ( name === "style" ) {
15
+ if ( isStr ( newValue ) ) {
16
+ dom . setAttribute ( name , newValue )
17
+ } else {
18
+ for ( const k in { ...oldValue , ...newValue } ) {
19
+ if ( ! ( oldValue && newValue && oldValue [ k ] === newValue [ k ] ) ) {
20
+ ; ( dom as any ) [ name ] [ k ] = newValue ?. [ k ] || ""
21
+ }
18
22
}
19
23
}
20
- } else if ( name [ 0 ] === 'o' && name [ 1 ] === 'n' ) {
24
+ } else if ( name [ 0 ] === "o" && name [ 1 ] === "n" ) {
21
25
name = name . slice ( 2 ) . toLowerCase ( ) as Extract < keyof P , string >
22
26
if ( oldValue ) dom . removeEventListener ( name , oldValue )
23
27
dom . addEventListener ( name , newValue )
24
28
} else if ( name in dom && ! ( dom instanceof SVGElement ) ) {
25
- ; ( dom as any ) [ name ] = newValue || ''
29
+ ; ( dom as any ) [ name ] = newValue || ""
26
30
} else if ( newValue == null || newValue === false ) {
27
31
dom . removeAttribute ( name )
28
32
} else {
@@ -33,11 +37,11 @@ export const updateElement = <P extends Attributes>(
33
37
34
38
export const createElement = < P = Attributes > ( fiber : IFiber ) => {
35
39
const dom =
36
- fiber . type === ' text'
37
- ? document . createTextNode ( '' )
40
+ fiber . type === " text"
41
+ ? document . createTextNode ( "" )
38
42
: fiber . lane & LANE . SVG
39
43
? document . createElementNS (
40
- ' http://www.w3.org/2000/svg' ,
44
+ " http://www.w3.org/2000/svg" ,
41
45
fiber . type as string
42
46
)
43
47
: document . createElement ( fiber . type as string )
0 commit comments