@croquet/react
Version:
React bindings for Croquet
51 lines (49 loc) • 1.95 kB
TypeScript
import { CroquetSessionParameters } from '@croquet/croquet';
import { CroquetReactView } from './CroquetReactView';
import { ReactModel } from './ReactModel';
export interface CroquetReactSessionParameters<M extends ReactModel> extends Omit<CroquetSessionParameters<M, CroquetReactView<M>>, 'view'> {
}
/** When Croquet is used in a component that is a part of a bigger application,
* it is sometimes better to establish the Croquet session instance outside,
* and then pass it in to the Croquet-powered part.
* ```
* const [croquetSession, setCroquetSession] = useState(null)
* const [croquetView, setCroquetView] = useState(null)
* const calledOnce = useRef(false)
* useEffect(() => {
* if (!calledOnce.current) {
* calledOnce.current = true
* const sessionParams = {
* name: projectId,
* apiKey: import.meta.env.VITE_CROQUET_API_KEY,
* tps: 0.5,
* appId: import.meta.env.VITE_CROQUET_APP_ID,
* password: 'abc',
* model: MyCroquetModel,
* eventRateLimit: import.meta.env.EVENT_RATE_LIMIT || 60,
* }
* createCroquetSession(sessionParams as any).then((session) => {
* console.log(`session created`)
* setCroquetSession(session)
* setCroquetView(session.view)
* setSyncedCallback((flag) => {
* console.log(`synced`, flag)
* if (flag) {
* setCroquetView((old) => session.view)
* }
* session.view.detachCallback = (e) => {
* console.log(`detached`)
* setCroquetView(null)
* }
* })
* })
* }
* }, [])
* return (
* <CroquetRoot croquetView={croquetView}>
* <MyCroquetComponent/>
* </CroquetRoot>
* )
```
*/
export declare function createCroquetSession<M extends ReactModel>(params: CroquetReactSessionParameters<M>): Promise<import("@croquet/croquet").CroquetSession<CroquetReactView<M>>>;