nrgy
Version:
The library for reactive programming using efficient computing and MVC/MVVM patterns
49 lines (46 loc) • 1.17 kB
JavaScript
import {
objectEquals
} from "./chunk-JYWBIFMU.js";
import {
compute,
effect
} from "./chunk-6EESSQRU.js";
// src/react/useAtom.ts
import { useEffect, useState } from "react";
function useAtom(source) {
const [value, setValue] = useState(source);
useEffect(() => {
const subscription = effect(source, (value2) => setValue(value2));
return subscription.destroy;
}, [source]);
return value;
}
// src/react/useAtoms.ts
import { useMemo } from "react";
var EMPTY_ATOMS_SOURCES = {};
var EMPTY_ATOMS_RESULTS = {};
var useAtoms = function(sources) {
const sourcesArg = sources != null ? sources : EMPTY_ATOMS_SOURCES;
const $result = useMemo(() => createComputedAtoms(sourcesArg), [sourcesArg]);
return useAtom($result);
};
function createComputedAtoms(sources) {
if (sources === EMPTY_ATOMS_SOURCES) {
return compute(() => EMPTY_ATOMS_RESULTS);
}
return compute(
() => {
const sourceAtoms = sources;
const result = {};
for (const key of Object.keys(sourceAtoms)) {
result[key] = sourceAtoms[key]();
}
return result;
},
{ equal: objectEquals }
);
}
export {
useAtom,
useAtoms
};