From 970bf22a6a3a7a587ebf99ec964a18a41b0c7630 Mon Sep 17 00:00:00 2001 From: Andre Padez Date: Sun, 19 Oct 2025 03:28:27 +0100 Subject: [PATCH] no useCallbacks or useMemos --- AGENTS.md | 5 ++++- UNIFIED_API.md | 5 +++-- src/useGame.ts | 2 +- src/useGameStatus/useGameStatus.ts | 6 +++--- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 28cf764..97b14d7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -88,6 +88,7 @@ import { MazeRenderer } from './MazeRenderer'; - **Explicit returns**: Always return objects from hooks - **Destructuring**: Use object destructuring for parameters and returns - **Arrow functions**: Prefer arrow functions for consistency +- **No useCallback/useMemo**: React 19 optimization makes these hooks unnecessary ### Error Handling - **Early returns**: Guard clauses at function start @@ -176,6 +177,7 @@ export function useGame(options: GameOptions, platformHook?: unknown): GameManag - Break existing patterns without reason - Write overly complex implementations - Add unnecessary features +- Use `useCallback` or `useMemo` anywhere in the codebase ### Always DO - Follow existing code patterns exactly @@ -183,4 +185,5 @@ export function useGame(options: GameOptions, platformHook?: unknown): GameManag - Maintain type safety - Keep implementations simple and focused - Update documentation proactively -- Test builds after changes \ No newline at end of file +- Test builds after changes +- Use plain functions instead of `useCallback`/`useMemo` (React 19 optimization) \ No newline at end of file diff --git a/UNIFIED_API.md b/UNIFIED_API.md index 0da2229..5264c56 100644 --- a/UNIFIED_API.md +++ b/UNIFIED_API.md @@ -262,8 +262,9 @@ The unified API is designed to accommodate: - ✅ **useGameStatus implementation** - Complete - ✅ **useKeyBindings implementation** - Complete - ✅ **useCursor implementation** - Complete -- 🔄 **useBoard implementation** - In progress -- 🔄 **useGame implementation** - In progress +- ✅ **useBoard implementation** - Complete +- ✅ **useGame implementation** - Complete +- ✅ **React 19 optimization** - No useCallback/useMemo usage - ⏳ **Platform integration** - Pending - ⏳ **Advanced features** - Pending (scoring, animations, etc.) diff --git a/src/useGame.ts b/src/useGame.ts index 9671f39..2cbf2cb 100644 --- a/src/useGame.ts +++ b/src/useGame.ts @@ -10,7 +10,7 @@ export function useGame(options: GameOptions, platformHook?: unknown): GameManag const { containerRef, renderBoard } = board; const gameStatusManager = useGameStatus(); -const { gameStatus, startGame, togglePause, quitGame, setGameStatus } = gameStatusManager; + const { gameStatus, startGame, togglePause, quitGame, setGameStatus } = gameStatusManager; const cursor = useCursor(board, gameStatus); diff --git a/src/useGameStatus/useGameStatus.ts b/src/useGameStatus/useGameStatus.ts index 4ed145f..9223110 100644 --- a/src/useGameStatus/useGameStatus.ts +++ b/src/useGameStatus/useGameStatus.ts @@ -1,10 +1,10 @@ -import { useState, useCallback } from 'react'; +import { useState } from 'react'; import type { GameStatus, BoardManager, Coord } from '../types'; export function useGameStatus(board?: BoardManager, setHeroPos?: (pos: Coord) => void) { const [gameStatus, setGameStatus] = useState('waiting'); - const startGame = useCallback(() => { + function startGame() { if (board && setHeroPos) { const m = board.mazeRef.current; if (!m.length) return; @@ -17,7 +17,7 @@ export function useGameStatus(board?: BoardManager, setHeroPos?: (pos: Coord) => } } setGameStatus('started'); - }, [board, setHeroPos]); + } function togglePause(pause?: boolean) { if (typeof pause === 'boolean') {