mirror of
https://github.com/centau/vide.git
synced 2026-08-20 14:41:37 +00:00
1.3 KiB
1.3 KiB
Actions
Actions are special callbacks that you can pass along with properties, to run some code on an instance receiving them.
local action = vide.action
<<<<<<< HEAD
```luau
=======
>>>>>>> 58a31a1b329e922dc86c554e8220012ab7238f1b
create "TextLabel" {
Text = "test",
action(function(instance)
print(instance.Text)
end)
}
-- will print "test"
Actions can be wrapped with functions for reuse. Below is an example of an action used to listen for property changes:
local action = vide.action
local source = vide.source
local effect = vide.effect
local cleanup = vide.cleanup
local function changed(property: string, callback: (new) -> ())
return action(function(instance)
local connection = instance:GetPropertyChangedSignal(property):Connect(function()
callback(instance[property])
end)
-- remember to clean up the connection when the reactive scope the action
-- is ran in is destroyed, so the instance can be garbage collected
cleanup(connection)
end)
end
local output = source ""
local instance = create "TextBox" {
changed("Text", output)
}
effect(function()
print(output())
end)
instance.Text = "foo" -- "foo" will be printed by the effect
The source output will be updated with the new property value any time it is
changed externally.