|
@@ -1,3 +1,5 @@
|
|
|
+import { useState, useEffect } from "react";
|
|
|
+
|
|
|
const createObservable = initial => {
|
|
|
let _val = initial;
|
|
|
let _listeners = [];
|
|
@@ -22,10 +24,14 @@ const createObservable = initial => {
|
|
|
|
|
|
const nameToHookName = name => "use" + name.chatAt(0).toUpperCase() + name.slice(1);
|
|
|
|
|
|
+const shallowEq = (x, y) => x === y;
|
|
|
+
|
|
|
const createHook = obs => {
|
|
|
// allow linters to pick this up as a hook
|
|
|
- const useObservable = () => {
|
|
|
- // TODO
|
|
|
+ const useObservable = (equality = shallowEq) => {
|
|
|
+ const [val, setVal] = useState(obs._get());
|
|
|
+ useEffect(() => obs._sub(setVal, equality), [equality]);
|
|
|
+ return val;
|
|
|
}
|
|
|
return useObservable;
|
|
|
}
|