diff options
Diffstat (limited to 'src/reactHelper.js')
-rw-r--r-- | src/reactHelper.js | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/reactHelper.js b/src/reactHelper.js new file mode 100644 index 00000000..c67f252b --- /dev/null +++ b/src/reactHelper.js @@ -0,0 +1,40 @@ +import { useRef, useEffect, useCallback } from 'react'; +import { useDispatch } from 'react-redux'; +import { errorsActions } from './store'; + +export const usePrevious = (value) => { + const ref = useRef(); + useEffect(() => { + ref.current = value; + }); + return ref.current; +}; + +/* eslint-disable */ +export const useEffectAsync = (effect, deps) => { + const dispatch = useDispatch(); + const ref = useRef(); + useEffect(() => { + effect() + .then((result) => ref.current = result) + .catch((error) => dispatch(errorsActions.push(error.message))); + + return () => { + const result = ref.current; + if (result) { + result(); + } + }; + }, [...deps, dispatch]); +}; + +export const useCatch = (method) => { + const dispatch = useDispatch(); + return (...parameters) => { + method(...parameters).catch((error) => dispatch(errorsActions.push(error.message))); + }; +}; + +export const useCatchCallback = (method, deps) => { + return useCallback(useCatch(method), deps); +}; |