alveron
Version:
Elm-inspired state management for React
17 lines (16 loc) • 618 B
JavaScript
// @ts-ignore
import { useOptimistic } from 'react';
import useStoreFactory from './useStoreFactory.js';
export default function useOptimisticStoreWithMiddleware(middleware = []) {
function useState(initialState) {
const [state, setState] = useOptimistic(initialState, (_, update) => update);
function setFunctionalState(newState) {
if (typeof newState === 'function') {
return setState(newState(state));
}
return setState(newState);
}
return [state, setFunctionalState];
}
return useStoreFactory(useState)(middleware);
}