1
0

reactivity.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { scheduler } from './scheduler'
  2. let reactive, effect, release, raw
  3. let shouldSchedule = true
  4. export function disableEffectScheduling(callback) {
  5. shouldSchedule = false
  6. callback()
  7. shouldSchedule = true
  8. }
  9. export function setReactivityEngine(engine) {
  10. reactive = engine.reactive
  11. release = engine.release
  12. effect = (callback) => engine.effect(callback, { scheduler: task => {
  13. if (shouldSchedule) {
  14. scheduler(task)
  15. } else {
  16. task()
  17. }
  18. } })
  19. raw = engine.raw
  20. }
  21. export function overrideEffect(override) { effect = override }
  22. export function elementBoundEffect(el) {
  23. let cleanup = () => {}
  24. let wrappedEffect = (callback) => {
  25. let effectReference = effect(callback)
  26. if (! el._x_effects) {
  27. el._x_effects = new Set
  28. // Livewire depends on el._x_runEffects.
  29. el._x_runEffects = () => { el._x_effects.forEach(i => i()) }
  30. }
  31. el._x_effects.add(effectReference)
  32. cleanup = () => {
  33. if (effectReference === undefined) return
  34. el._x_effects.delete(effectReference)
  35. release(effectReference)
  36. }
  37. return effectReference
  38. }
  39. return [wrappedEffect, () => { cleanup() }]
  40. }
  41. export {
  42. release,
  43. reactive,
  44. effect,
  45. raw,
  46. }