Skip to content

Instantly share code, notes, and snippets.

@ambroseus
Forked from malerba118/library.js
Created November 30, 2019 15:16
Show Gist options
  • Save ambroseus/1eaf4416bbaedf30429c23c540eb0f64 to your computer and use it in GitHub Desktop.
Save ambroseus/1eaf4416bbaedf30429c23c540eb0f64 to your computer and use it in GitHub Desktop.
const useApi = (apiFactory, initialState) => {
let [state, setState] = useState(initialState);
return useMemo(() => apiFactory({ state, setState }), [
state,
setState,
apiFactory
]);
};
const createStore = (apiFactory, initialState) => {
const StoreContext = createContext();
const StoreProvider = props => {
let store = useApi(apiFactory, initialState);
return (
<StoreContext.Provider value={store}>
{props.children}
</StoreContext.Provider>
);
};
let useStore = () => {
return useContext(StoreContext);
};
return [StoreProvider, useStore];
};
const createTestApi = (apiFactory, defaultValue) => {
let state = defaultValue;
let setState = updater => {
if (typeof updater === "function") {
state = updater(state);
} else {
state = updater;
}
ref.api = apiFactory({ state, setState });
};
let ref = {
api: apiFactory({ state, setState })
};
return ref;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment