Contoh

Pola penggunaan nyata untuk Tide v1.1.

Shorthand URL

Ganti boilerplate fetcher panjang dengan string url sederhana. Handler bawaan sudah termasuk credentials, abort, dan deteksi AuthError.

tsx
const gateways = createTide({
key: 'gateways',
url: '/api/gateways',
wsPath: 'data.hermes.gateways',
})

ETag / fetch kondisional

Aktifkan etag untuk mengirim header If-None-Match. Pada 304, Tide lewati update — tanpa bandwidth, tanpa re-render.

tsx
const tooling = createTide({
key: 'tooling',
url: '/api/agentic/tooling',
etag: true,
pollInterval: 15000,
})

Deduplikasi konten

hashCompare menggunakan hashing djb2 untuk melewati update reaktif saat data identik — mencegah rekonsiliasi DOM yang tidak perlu.

tsx
const stack = createTide({
key: 'stack',
url: '/api/stack/status',
hashCompare: true,
pollInterval: 5000,
})

Key reaktif (route dinamis)

Berikan fungsi getter untuk key dan url. Tide otomatis re-fetch saat salah satu berubah.

tsx
const [query, setQuery] = createSignal('react')

const results = createTide({
key: () => `search-${query()}`,
url: () => `/api/search?q=${query()}`,
})

Fetch kondisional (enabled)

Gunakan enabled untuk menjeda semua aktivitas (fetch, poll, WS) sampai kondisi terpenuhi.

tsx
const [loggedIn, setLoggedIn] = createSignal(false)

const data = createTide({
key: 'private',
url: '/api/private',
enabled: () => loggedIn(),
})

Shorthand wsPath

Gunakan wsPath sebagai pengganti fungsi ws untuk ekstraksi dot-notation sederhana dari pesan WebSocket.

tsx
// Before (v1.0)
ws: (msg) => msg?.data?.stack ?? null

// After (v1.1)
wsPath: 'data.stack'

WS backoff + heartbeat

tsx
<TideProvider
ws={{ url: 'wss://server/ws' }}
reconnect={{ baseMs: 1000, maxMs: 30000 }}
heartbeat={25000}
>
<App />
</TideProvider>