Skip to content

Async Fetch

Async Fetch

Fetch data with create_resource.

from wybthon import Suspense, h, create_resource

async def load_data(signal=None):
    # e.g., using js.fetch with AbortSignal
    return {"message": "hello"}

res = create_resource(load_data)

def Content(props):
    if res.error.get():
        return h("div", {}, f"Error: {res.error.get()}")
    return h("pre", {}, str(res.data.get()))

View = lambda props: h(
    Suspense,
    {"resource": res, "fallback": h("div", {}, "Loading..."), "keep_previous": True},
    Content({}),
)

With source signal

Automatically refetch when a source signal changes:

from wybthon import create_resource, create_signal

user_id, set_user_id = create_signal(1)

async def load_user(signal=None):
    resp = await js.fetch(f"/api/users/{user_id()}")
    return await resp.json()

# Changing user_id triggers a refetch
res = create_resource(user_id, load_user)