Skip to content

Instantly share code, notes, and snippets.

@kolserdav
Created May 20, 2020 08:25
Show Gist options
  • Select an option

  • Save kolserdav/e51b4aa70ac58511d229cfe3cad99f55 to your computer and use it in GitHub Desktop.

Select an option

Save kolserdav/e51b4aa70ac58511d229cfe3cad99f55 to your computer and use it in GitHub Desktop.

Revisions

  1. kolserdav created this gist May 20, 2020.
    36 changes: 36 additions & 0 deletions useStateWithPromise.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,36 @@
    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;