Skip to content

Lit Example: Prefetching

import { LitElement, html } from 'lit'
import { Router } from '@lit-labs/router'
import { QueryClient, QueryClientProvider } from '@tanstack/lit-query'
import './character-view'
import './home-view'

const queryClient = new QueryClient()

class PrefetchingQueryProvider extends QueryClientProvider {
  constructor() {
    super()
    this.client = queryClient
  }
}

class PrefetchingApp extends LitElement {
  private readonly router = new Router(this, [
    { path: '/', render: () => html`<home-view></home-view>` },
    {
      path: '/character/:id',
      render: ({ id }) =>
        html`<character-view .characterId=${id}></character-view>`,
    },
  ])

  protected override createRenderRoot(): HTMLElement | DocumentFragment {
    return this
  }

  render() {
    return html`
      <prefetching-query-provider
        >${this.router.outlet()}</prefetching-query-provider
      >
    `
  }
}

customElements.define('prefetching-query-provider', PrefetchingQueryProvider)
customElements.define('prefetching-app', PrefetchingApp)