File tree Expand file tree Collapse file tree 2 files changed +29
-12
lines changed
Expand file tree Collapse file tree 2 files changed +29
-12
lines changed Original file line number Diff line number Diff line change 1+ export function updateDomProperties ( dom , prevProps , nextProps ) {
2+ const isEvent = name => name . startsWith ( "on" ) ;
3+ const isAttribute = name => ! isEvent ( name ) && name != "children" ;
4+
5+ // Remove event listeners
6+ Object . keys ( prevProps ) . filter ( isEvent ) . forEach ( name => {
7+ const eventType = name . toLowerCase ( ) . substring ( 2 ) ;
8+ dom . removeEventListener ( eventType , prevProps [ name ] ) ;
9+ } ) ;
10+
11+ // Remove attributes
12+ Object . keys ( prevProps ) . filter ( isAttribute ) . forEach ( name => {
13+ dom [ name ] = null ;
14+ } ) ;
15+
16+ // Set attributes
17+ Object . keys ( nextProps ) . filter ( isAttribute ) . forEach ( name => {
18+ dom [ name ] = nextProps [ name ] ;
19+ } ) ;
20+
21+ // Add event listeners
22+ Object . keys ( nextProps ) . filter ( isEvent ) . forEach ( name => {
23+ const eventType = name . toLowerCase ( ) . substring ( 2 ) ;
24+ dom . addEventListener ( eventType , nextProps [ name ] ) ;
25+ } ) ;
26+ }
Original file line number Diff line number Diff line change 1+ import { updateDomProperties } from "./dom-utils" ;
2+
13let rootInstance = null ;
24
35export function render ( element , container ) {
@@ -27,18 +29,7 @@ function instantiate(element) {
2729 ? document . createTextNode ( "" )
2830 : document . createElement ( type ) ;
2931
30- // Add event listeners
31- const isListener = name => name . startsWith ( "on" ) ;
32- Object . keys ( props ) . filter ( isListener ) . forEach ( name => {
33- const eventType = name . toLowerCase ( ) . substring ( 2 ) ;
34- dom . addEventListener ( eventType , props [ name ] ) ;
35- } ) ;
36-
37- // Set properties
38- const isAttribute = name => ! isListener ( name ) && name != "children" ;
39- Object . keys ( props ) . filter ( isAttribute ) . forEach ( name => {
40- dom [ name ] = props [ name ] ;
41- } ) ;
32+ updateDomProperties ( dom , [ ] , props ) ;
4233
4334 // Instantiate and append children
4435 const childElements = props . children || [ ] ;
You can’t perform that action at this time.
0 commit comments