add (p)react hooks
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
import { Interpreter_T, subscribeToEvents, unsubscribe } from '../index';
|
||||
import { useMemo, useState, useEffect, useCallback } from 'preact/hooks';
|
||||
|
||||
// need to use an integer instead of toggling a boolean back and forth; probably a bug with useState():
|
||||
let i=0;
|
||||
export function useInterpreter<C>(createInterpreter:()=>Interpreter_T<C>){
|
||||
const interpreter = useMemo(createInterpreter,[]);
|
||||
// some variable whose value to switch whenever we want to trigger a re-render:
|
||||
const [triggerRenderValue, setTriggerRenderValue] = useState(i);
|
||||
const triggerRender = useCallback(()=>{ setTriggerRenderValue(i++); }, [setTriggerRenderValue]);
|
||||
// ensure only one subscription is ever made, and destroy it when the component unloads:
|
||||
useEffect(()=>{
|
||||
const subscriptionId = subscribeToEvents(interpreter, triggerRender);
|
||||
return ()=>{ unsubscribe(interpreter, subscriptionId); };
|
||||
},[triggerRender]);
|
||||
return interpreter;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import { Interpreter_T, subscribeToEvents, unsubscribe } from '../index';
|
||||
import { useMemo, useState, useEffect, useCallback } from 'react';
|
||||
|
||||
// need to use an integer instead of toggling a boolean back and forth; probably a bug with useState():
|
||||
let i=0;
|
||||
export function useInterpreter<C>(createInterpreter:()=>Interpreter_T<C>){
|
||||
const interpreter = useMemo(createInterpreter,[]);
|
||||
// some variable whose value to switch whenever we want to trigger a re-render:
|
||||
const [triggerRenderValue, setTriggerRenderValue] = useState(i);
|
||||
const triggerRender = useCallback(()=>{ setTriggerRenderValue(i++); }, [setTriggerRenderValue]);
|
||||
// ensure only one subscription is ever made, and destroy it when the component unloads:
|
||||
useEffect(()=>{
|
||||
const subscriptionId = subscribeToEvents(interpreter, triggerRender);
|
||||
return ()=>{ unsubscribe(interpreter, subscriptionId); };
|
||||
},[triggerRender]);
|
||||
return interpreter;
|
||||
}
|
||||
Reference in New Issue
Block a user