A React Context hook factory that enables using React hooks within context value functions. Perfect for game development, state management, and complex interactive applications.
- 🎣 Use React hooks in context value functions
- 🔄 Real-time state updates with event listeners
- 📦 Full TypeScript support
- 🪶 Zero dependencies (except React)
npm install create-custom-context
import { createCustomContext } from 'create-custom-context';
import { useState, useEffect } from 'react';
// Create context with hooks
const [Provider, useContext] = createCustomContext(() => {
const [count, setCount] = useState(0);
useEffect(() => {
const timer = setInterval(() => setCount(c => c + 1), 1000);
return () => clearInterval(timer);
}, []);
return { count, setCount };
});
// Use in components
function App() {
return (
<Provider>
<Counter />
</Provider>
);
}
function Counter() {
const { count, setCount } = useContext();
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(0)}>Reset</button>
</div>
);
}
const [GameProvider, useGame] = createCustomContext(() => {
const [weapon, setWeapon] = useState(0);
useEffect(() => {
const handleKey = (e: KeyboardEvent) => {
if (e.code === 'Digit1') setWeapon(0);
if (e.code === 'Digit2') setWeapon(1);
};
document.addEventListener('keydown', handleKey);
return () => document.removeEventListener('keydown', handleKey);
}, []);
return { weapon, weapons: ['Sword', 'Bow'] };
});
Parameters:
contextValue
: Function that returns context value (can use React hooks)
Returns:
Provider
: React component to wrap your appuseContextHook
: Hook to access context value
TypeScript:
const [Provider, useHook] = createCustomContext<{count: number}>(() => ({
count: useState(0)[0]
}));
The hook throws an error if used outside the Provider:
function Component() {
const data = useHook(); // Error: Hook must be used within Provider
}
MIT © ChenHaoJie9527