mirror of
https://github.com/centau/vide.git
synced 2026-08-20 14:41:37 +00:00
38 lines
1.1 KiB
Markdown
38 lines
1.1 KiB
Markdown
# Cleanup
|
|
|
|
Sometimes you may need to do some cleanup when destroying a component or after
|
|
a side-effect from a source update. Vide provides a function `cleanup()` which
|
|
is used to queue a callback for the next time a reactive scope is rerun or
|
|
destroyed, or when a stable scope is destroyed.
|
|
|
|
```luau
|
|
local root = vide.root
|
|
local source = vide.source
|
|
local effect = vide.effect
|
|
|
|
local count = source(0)
|
|
|
|
|
|
local destroy = root(function()
|
|
effect(function()
|
|
local x = count()
|
|
cleanup(function() print(x) end)
|
|
end)
|
|
|
|
cleanup(function() print "root destroyed" end)
|
|
end)
|
|
|
|
count(1) -- prints "0"
|
|
count(2) -- prints "1"
|
|
destroy() -- prints "2" and "root destroyed"
|
|
```
|
|
|
|
::: tip
|
|
Roblox instances do not need to be explicitly destroyed for their
|
|
memory to be freed, they only need to be parented to `nil`. So there is no
|
|
need to use `cleanup()` to destroy instances. However, be wary of connecting
|
|
a function that references an instance to an event from the same instance,
|
|
this causes the instance to reference itself and never be freed. In such a case
|
|
you would need to use `cleanup()` to disconnect this connection or to explicitly
|
|
destroy the instance.
|
|
:::
|