21 lines
434 B
JavaScript
Executable File
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]
|
|
}
|