bk-shop/src/hooks/useAsyncCallback.js

21 lines
434 B
JavaScript
Executable File

import { useState, useRef, useEffect } from 'react'
import { useImmer } from 'use-immer'
export default (props) => {
const [state, setState] = useImmer(props)
const callbackRef = useRef()
useEffect(() => {
if (callbackRef.current) {
callbackRef.current(state)
}
}, [state])
const setStateAsync = (fn, callback) => {
setState(fn)
callbackRef.current = callback
}
return [state, setStateAsync]
}