Więc coś powoduje, że hook wykonuje się cały czas, hook musi wykonać prostą operację asynchroniczną.
Z reacta jestem dosyć zielony, a wykonywanie operacji asynchronicznych w hookach już wgl wydaje mi się być mocno skomplikowane, pojęcia nie mam dlaczego się tak dzieje.
import { useEffect, useState } from "react"
import { DbHandler } from "../../../utilities/dbHandler"
import { DefaultLogger } from "../../../utilities/logger"
export type UpdateIsAllowedFunction = () => Promise<void>
export const useIsDbAllowed = (): [boolean | null, boolean, UpdateIsAllowedFunction] => {
const [isAllowed, setIsAllowed] = useState(null)
const [isChecking, setIsChecking] = useState(false)
//async execution wrapper
const updateIsAllowed = async () => {
if(isChecking) {
DefaultLogger.warn(`check operation is in progress...`)
return
}
try {
setIsChecking(true)
setIsAllowed(await DbHandler.isAllowed())
} finally {
setIsChecking(false)
}
}
//execute on mount
useEffect(() => {
updateIsAllowed()
}, [])
return [isAllowed, isChecking, updateIsAllowed]
}
export default useIsDbAllowed
Z góry dzięki