useLoading()
Ajuda a acompanhar o estado de carregamento e de erro de funções assíncronas imperativas.
dica
useSuspense() ou useDLE() são melhores para endpoints GET/de leitura.
Uso
PostResource
PostDetail
PostForm
PostCreate
Navigation
import { useLoading, useController } from '@data-client/react'; import { PostResource } from './PostResource'; import PostForm from './PostForm'; export default function PostCreate({ navigateToPost }) { const ctrl = useController(); const [handleSubmit, loading, error] = useLoading( async data => { const post = await ctrl.fetch(PostResource.getList.push, data); navigateToPost(post.id); }, [ctrl], ); return ( <PostForm onSubmit={handleSubmit} loading={loading} error={error} /> ); }
Resultado
Store▶
Assim como useCallback, recebe uma lista de dependências para garantir a consistência referencial da função.
Eslint
Configuração do Eslint
Como usamos a lista de deps, não deixe de adicionar useLoading à configuração 'additionalHooks' da regra react-hooks/exhaustive-deps, caso você a utilize.
{
"rules": {
// ...
"react-hooks/exhaustive-deps": ["warn", {
"additionalHooks": "(useLoading)"
}]
}
}
Tipos
export default function useLoading<
F extends (...args: any) => Promise<any>,
>(func: F, deps: readonly any[] = []): [F, boolean];
Exemplos
Paginação do Github
Explore o exemplo github-app
Envio do formulário de comentário do Github
Explore o exemplo github-app