Basic usage
Callref.on(eventType, callback) to start listening. It returns an unsubscribe function you call when you’re done:
Documentation Index
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
Listen for real-time updates with the Lark SDK
ref.on(eventType, callback) to start listening. It returns an unsubscribe function you call when you’re done:
import { LarkDatabase } from "@lark-sh/client";
const db = new LarkDatabase("my-project/my-database", { anonymous: true });
const unsubscribe = db.ref("scores/player1").on("value", (snapshot) => {
console.log("Current score:", snapshot.val());
});
// Later, stop listening
unsubscribe();
useEffect cleanup, Vue’s onUnmounted, and similar framework lifecycle hooks.valueconst unsubscribe = db.ref("game/state").on("value", (snapshot) => {
const state = snapshot.val();
console.log("Full game state:", state);
});
child_addedconst unsubscribe = db.ref("chat/messages").on(
"child_added",
(snapshot, prevChildKey) => {
console.log("New message:", snapshot.key, snapshot.val());
console.log("After:", prevChildKey);
}
);
child_changedconst unsubscribe = db.ref("players").on(
"child_changed",
(snapshot, prevChildKey) => {
console.log("Player updated:", snapshot.key, snapshot.val());
}
);
child_removedconst unsubscribe = db.ref("players").on("child_removed", (snapshot) => {
console.log("Player left:", snapshot.key);
});
child_movedconst unsubscribe = db.ref("leaderboard")
.orderByChild("score")
.on("child_moved", (snapshot, prevChildKey) => {
console.log("Rank changed:", snapshot.key, "now after:", prevChildKey);
});
const players = new Map<string, any>();
const unsubAdded = db.ref("game/players").on("child_added", (snapshot) => {
players.set(snapshot.key, snapshot.val());
console.log(`${snapshot.val().name} joined. Total: ${players.size}`);
});
const unsubRemoved = db.ref("game/players").on("child_removed", (snapshot) => {
players.delete(snapshot.key);
console.log(`${snapshot.val().name} left. Total: ${players.size}`);
});
const unsubChanged = db.ref("game/players").on("child_changed", (snapshot) => {
players.set(snapshot.key, snapshot.val());
console.log(`${snapshot.val().name} updated.`);
});
// Clean up all listeners
function cleanup() {
unsubAdded();
unsubRemoved();
unsubChanged();
}
const unsubscribe = db.ref("rooms/lobby/messages")
.orderByChild("timestamp")
.limitToLast(50)
.on("child_added", (snapshot) => {
const msg = snapshot.val();
displayMessage(msg.sender, msg.text, msg.timestamp);
});
const unsubscribe = db.ref("game/score").on("value", (snapshot) => {
const score = snapshot.val() ?? 0;
updateScoreDisplay(score);
});
const unsubscribe = db.ref("players")
.orderByChild("score")
.limitToLast(10)
.on("value", (snapshot) => {
const leaderboard: Array<{ name: string; score: number }> = [];
snapshot.forEach((child) => {
leaderboard.push(child.val());
});
leaderboard.reverse(); // limitToLast returns ascending, flip for top-first
renderLeaderboard(leaderboard);
});
const unsubscribe = db.ref("data").on("value", callback);
// Call it when done
unsubscribe();
import { useEffect, useState } from "react";
import { LarkDatabase } from "@lark-sh/client";
function ScoreDisplay({ db, playerId }: { db: LarkDatabase; playerId: string }) {
const [score, setScore] = useState(0);
useEffect(() => {
const unsubscribe = db.ref(`scores/${playerId}`).on("value", (snapshot) => {
setScore(snapshot.val() ?? 0);
});
return unsubscribe;
}, [db, playerId]);
return <div>Score: {score}</div>;
}
