You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
905 B
32 lines
905 B
export default tag Counter < button
|
|
# This is the internal state of the tag. We're not exposing it with `prop`
|
|
# because we want to read the count from the server:
|
|
count = 0
|
|
|
|
# Mount runs when this tag is first attached to the DOM.
|
|
# https://imba.io/docs/components/lifecycle
|
|
def mount
|
|
# Fetch the count from the server
|
|
try
|
|
const res = await window.fetch('/count')
|
|
const data = await res.json()
|
|
count = data.count
|
|
catch e
|
|
console.error("Couldn't fetch count", e)
|
|
|
|
def increment
|
|
# Increment the counter on the server, then update the client
|
|
try
|
|
const res = await window.fetch('/increment', {
|
|
method: 'POST'
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
}
|
|
body: JSON.stringify({ increment: 1 })
|
|
})
|
|
const data = await res.json()
|
|
count = data.count
|
|
catch e
|
|
console.error("Couldn't increment", e)
|
|
|
|
<self @click=increment> `Count is {count}`
|
|
|