Skip to content

Instantly share code, notes, and snippets.

@kolserdav
Created May 20, 2020 08:25
Show Gist options
  • Save kolserdav/e51b4aa70ac58511d229cfe3cad99f55 to your computer and use it in GitHub Desktop.
Save kolserdav/e51b4aa70ac58511d229cfe3cad99f55 to your computer and use it in GitHub Desktop.
import React, { useState, useEffect } from 'react';
const useStateWithPromise = defaultVal => {
let [state, setState] = useState({
value: defaultVal,
resolve: () => {}
});
useEffect(
() => {
state.resolve(state.value);
},
[state]
);
return [
state.value,
updater => {
return new Promise(resolve => {
setState(prevState => {
let nextVal = updater;
if (typeof updater === "function") {
nextVal = updater(prevState.value);
}
return {
value: nextVal,
resolve
};
});
});
}
];
};
export default useStateWithPromise;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment