wasmoon // pages/todolist.lua
data-lua-module="pages/todolist"
source
local items, setItems = reactive.signal({})
local draft, setDraft = reactive.signal("")
local function addItem()
local d = draft()
if d == "" then return end
local copy = {}
for i, v in ipairs(items()) do copy[i] = v end
copy[#copy+1] = d
setItems(copy)
setDraft("")
end
reactive.effect(function()
list.innerHTML = ""
for _, v in ipairs(items()) do
dom.append(list, h("li", {}, v))
end
end)
Two signals + one effect. The effect tears down and rebuilds the list whenever the items signal mutates.