@@ -94,24 +94,6 @@ const scheduler = () => {
94
94
const effectQueue = new Map ( ) ;
95
95
const cleanupQueue = new Map ( ) ;
96
96
let requestId ;
97
- const requestTick = ( ) => {
98
- if ( requestId )
99
- cancelAnimationFrame ( requestId ) ;
100
- requestId = requestAnimationFrame ( flush ) ;
101
- } ;
102
- const enqueue = ( element , prop , fn ) => {
103
- if ( ! effectQueue . has ( element ) )
104
- effectQueue . set ( element , new Map ( ) ) ;
105
- const elEffects = effectQueue . get ( element ) ;
106
- if ( ! elEffects . has ( prop ) )
107
- elEffects . set ( prop , fn ) ;
108
- requestTick ( ) ;
109
- } ;
110
- const cleanup = ( effect , fn ) => {
111
- if ( ! cleanupQueue . has ( effect ) )
112
- cleanupQueue . set ( effect , fn ) ;
113
- requestTick ( ) ;
114
- } ;
115
97
const run = ( fn , msg ) => {
116
98
try {
117
99
fn ( ) ;
@@ -131,8 +113,27 @@ const scheduler = () => {
131
113
run ( fn , 'Cleanup failed' ) ;
132
114
cleanupQueue . clear ( ) ;
133
115
} ;
116
+ const requestTick = ( ) => {
117
+ if ( requestId )
118
+ cancelAnimationFrame ( requestId ) ;
119
+ requestId = requestAnimationFrame ( flush ) ;
120
+ } ;
121
+ const getEffectMap = ( key ) => {
122
+ if ( ! effectQueue . has ( key ) )
123
+ effectQueue . set ( key , new Map ( ) ) ;
124
+ return effectQueue . get ( key ) ;
125
+ } ;
126
+ const addToQueue = ( map ) => ( key , fn ) => {
127
+ const more = ! map . has ( key ) ;
128
+ map . set ( key , fn ) ;
129
+ if ( more )
130
+ requestTick ( ) ;
131
+ } ;
134
132
queueMicrotask ( flush ) ; // initial flush when the call stack is empty
135
- return { enqueue, cleanup } ;
133
+ return {
134
+ enqueue : ( element , prop , fn ) => addToQueue ( getEffectMap ( element ) ) ( prop , fn ) ,
135
+ cleanup : addToQueue ( cleanupQueue )
136
+ } ;
136
137
} ;
137
138
138
139
/* === Internal === */
@@ -204,8 +205,7 @@ const effect = (fn) => {
204
205
activeEffect = n ;
205
206
const cleanupFn = fn ( ( element , prop , callback ) => {
206
207
enqueue ( element , prop , callback ) ;
207
- if ( ! targets . has ( element ) )
208
- targets . add ( element ) ;
208
+ targets . add ( element ) ;
209
209
} ) ;
210
210
if ( isFunction ( cleanupFn ) )
211
211
cleanup ( n , cleanupFn ) ;
0 commit comments