add (p)react hooks

This commit is contained in:
Avraham Sakal
2023-05-18 17:12:17 -04:00
parent e24f5ff0bf
commit e36049c963
13 changed files with 100 additions and 5 deletions
+17
View File
@@ -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;
}
+17
View File
@@ -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;
}