MCPcopy Create free account
hub / github.com/WebReflection/neverland / createEffect

Function createEffect

test/neverland.js:439–489  ·  view source on GitHub ↗
(sync)

Source from the content-addressed store, hash-verified

437 var stop = function stop() {};
438
439 var createEffect = function createEffect(sync) {
440 return function (effect, guards) {
441 var state = current();
442 var i = state.i++;
443 var hook = state.hook,
444 stack = state.stack,
445 after = state.after;
446
447 if (i < stack.length) {
448 var info = stack[i];
449 var clean = info.clean,
450 update = info.update,
451 values = info.values;
452
453 if (!guards || guards.some(different, values)) {
454 info.values = guards;
455
456 if (clean) {
457 info.clean = null;
458 clean();
459 }
460
461 var invoke = function invoke() {
462 info.clean = effect();
463 };
464
465 if (sync) after.push(invoke);else update(invoke);
466 }
467 } else {
468 if (!effects.has(hook)) effects.set(hook, {
469 stack: [],
470 update: reraf()
471 });
472 var details = effects.get(hook);
473 var _info = {
474 clean: null,
475 stop: stop,
476 update: details.update,
477 values: guards
478 };
479 stack[i] = _info;
480 details.stack.push(_info);
481
482 var _invoke = function _invoke() {
483 _info.clean = effect();
484 };
485
486 if (sync) after.push(_invoke);else _info.stop = details.update(_invoke);
487 }
488 };
489 };
490
491 var useEffect = createEffect(false);
492 var useLayoutEffect = createEffect(true);

Callers 1

neverland.jsFile · 0.70

Calls 3

currentFunction · 0.85
updateFunction · 0.70
rerafFunction · 0.70

Tested by

no test coverage detected