27 lines
650 B
JavaScript
27 lines
650 B
JavaScript
|
import {useState, useEffect} from 'react';
|
|||
|
|
|||
|
/**
|
|||
|
* Hook permettant d’obtenir des résultats asynchrones.
|
|||
|
*
|
|||
|
* @param initial Valeur initiale lorsque la promesse n’a pas répondu.
|
|||
|
* @param func Fonction renvoyant une promesse.
|
|||
|
* @param ...args Arguments à passer à `func` qui sont susceptibles de changer.
|
|||
|
* @return Résultats de la promesse.
|
|||
|
*/
|
|||
|
export const useAsync = (initial, func, ...args) =>
|
|||
|
{
|
|||
|
const [results, setResults] = useState(initial);
|
|||
|
|
|||
|
useEffect(() =>
|
|||
|
{
|
|||
|
const fetcher = async () =>
|
|||
|
{
|
|||
|
setResults(await func(...args));
|
|||
|
};
|
|||
|
|
|||
|
fetcher();
|
|||
|
}, args);
|
|||
|
|
|||
|
return results;
|
|||
|
};
|