一键导入
dojo-entities
// Use when querying, fetching, or subscribing to game entities in dojo.js. Triggers: entity query, fetch entities, useModel, useEntityQuery, ToriiQueryBuilder, subscribe entities, getEntities, entity subscription, model data
// Use when querying, fetching, or subscribing to game entities in dojo.js. Triggers: entity query, fetch entities, useModel, useEntityQuery, ToriiQueryBuilder, subscribe entities, getEntities, entity subscription, model data
| name | dojo-entities |
| description | Use when querying, fetching, or subscribing to game entities in dojo.js. Triggers: entity query, fetch entities, useModel, useEntityQuery, ToriiQueryBuilder, subscribe entities, getEntities, entity subscription, model data |
Use this skill when:
Build type-safe queries for entities:
import { ToriiQueryBuilder, KeysClause, MemberClause } from "@dojoengine/sdk";
// Basic query with limit
const query = new ToriiQueryBuilder<typeof schema>()
.withLimit(100)
.build();
// Query with clause filter
const query = new ToriiQueryBuilder<typeof schema>()
.withClause(
KeysClause(["game-Player"], [playerAddress], "VariableLen").build()
)
.withLimit(50)
.build();
// Query with ordering
const query = new ToriiQueryBuilder<typeof schema>()
.addOrderBy("game-Player.score", "Desc")
.withLimit(10)
.build();
// Query specific models
const query = new ToriiQueryBuilder<typeof schema>()
.addEntityModel("game-Player")
.addEntityModel("game-Position")
.withLimit(100)
.build();
const query = new ToriiQueryBuilder<typeof schema>()
.withLimit(50) // Max results
.withCursor(nextCursor) // Pagination cursor
.withDirection("Forward") // "Forward" | "Backward"
.build();
// Keys clause - filter by entity keys
KeysClause(["namespace-Model"], [key1, key2], "VariableLen")
// Member clause - filter by field value
MemberClause("namespace-Model", "fieldName", "Eq", value)
// Composite clause - combine clauses
CompositeClause("And", [clause1, clause2])
const { sdk } = useDojoSDK();
// One-time fetch
const result = await sdk.getEntities({
query: new ToriiQueryBuilder<typeof schema>()
.withClause(clause)
.withLimit(100)
});
// Access results
result.items.forEach(entity => {
console.log(entity.entityId, entity.models);
});
// Pagination
if (result.next_cursor) {
const nextPage = await sdk.getEntities({
query: new ToriiQueryBuilder<typeof schema>()
.withCursor(result.next_cursor)
.withLimit(100)
});
}
const { sdk } = useDojoSDK();
const [initialData, subscription] = await sdk.subscribeEntityQuery({
query: new ToriiQueryBuilder<typeof schema>()
.withClause(clause)
.withLimit(100),
callback: ({ data, error }) => {
if (error) {
console.error("Subscription error:", error);
return;
}
// Handle real-time updates
console.log("Entity updated:", data);
}
});
// Clean up subscription
subscription.cancel();
import { useModel } from "@dojoengine/sdk/react";
function PlayerStats({ entityId }) {
// Format: "namespace-ModelName"
const player = useModel(entityId, "game-Player");
if (!player) return <div>Loading...</div>;
return <div>Score: {player.score}</div>;
}
import { useModels } from "@dojoengine/sdk/react";
function Leaderboard() {
const players = useModels("game-Player");
return (
<ul>
{Object.entries(players).map(([entityId, player]) => (
<li key={entityId}>{player?.name}: {player?.score}</li>
))}
</ul>
);
}
import { useHistoricalModel } from "@dojoengine/sdk/react";
function PlayerHistory({ entityId }) {
const history = useHistoricalModel(entityId, "game-Player");
return (
<ul>
{history.map((snapshot, i) => (
<li key={i}>Score: {snapshot.models.game.Player.score}</li>
))}
</ul>
);
}
import { getEntityIdFromKeys } from "@dojoengine/utils";
// Generate entity ID from keys
const entityId = getEntityIdFromKeys([
BigInt(playerAddress),
BigInt(gameId)
]);
"namespace-ModelName" format (hyphen-separated)entityId.toString() if neededUse this skill when the user asks to "test dojo contracts", "run integration tests", "start dojo stack", "test with torii", "verify contract behavior", mentions integration testing for Dojo/Cairo contracts, or needs to set up local katana/torii infrastructure.
Update @dojoengine/grpc proto files from Torii repository
Use when debugging and troubleshooting dojo.js applications. Triggers: dojo error, torii connection, entity not found, type mismatch, debug dojo, troubleshoot, subscription error, sync issues
Use when subscribing to game events and tracking tokens in dojo.js. Triggers: subscribe events, game events, token balance, event query, achievements, event subscription, onTokenBalanceUpdated, activity tracking
Use for React integration patterns and best practices in dojo.js. Triggers: dojo react, react hooks, effect atoms, Result.match, infinite scroll dojo, DojoSdkProvider, useDojoSDK, react patterns
Use when setting up dojo.js SDK in a frontend project. Triggers: setup dojo, initialize dojo, configure dojo, dojoengine setup, sdk init, DojoSdkProvider, world address, torii url, dojo config