vide/docs/tut/crash-course/12-actions.md
2024-07-03 15:02:53 +01:00

53 lines
1.2 KiB
Markdown

# Actions
Actions in Vide are special callbacks that you can pass along with properties,
to run some code on an instance receiving them.
```lua
local action = vide.action
```
```lua
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:
```lua
local action = vide.action
local cleanup = vide.cleanup
local function changed(prop: string, callback: (new) -> ())
return action(function(instance)
local connection = instance:GetPropertyChangedSignal(prop):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)
}
instance.Text = "foo"
print(output()) -- "foo"
```
The source `output` will be updated with the new property value any time it is
changed externally.