mirror of
https://github.com/centau/vide.git
synced 2026-08-20 06:21:37 +00:00
* update css and snippets * Add banner * improve home page * Update Banner * cleanup * Update font to JetBrains Mono * Add a quick look to Home * Simplify Home Page * Removed banner, removed copyright notice, reduced home page
1.5 KiB
1.5 KiB
Stateful Components
Stateful components in Vide are created using sources and effects - sources to store the data, and effects to display the data.
Internal State
local create = vide.create
local source = vide.source
local effect = vide.effect
local function Counter()
local count = source(0)
local instance = create "TextButton" {
Activated = function()
count(count() + 1)
end
}
effect(function()
instance.Text = "count: " .. count()
end)
return instance
end
Above is an example of a counter component, that when clicked, will increment its internal count, and automatically update its text to reflect that count.
Each instance of Counter() will maintain its own independent count, since the
count source is created inside the component.
External State
External sources can also be passed into components for them to use.
local function Counter(props: { count: () -> number })
local count = props.count
local instance = create "TextButton" {
Activated = function()
count(count() + 1)
end
}
effect(function()
instance.Text = "count: " .. count()
end)
return instance
end
local count = source(0)
Counter {
count = count
}
count(1) -- the Counter component will update to display this count
Sources can be created internally or passed in from externally, there are no restrictions on how they are used as long as the effect using it is created within a stable scope.