useTransition e startTransition
Agora que temos nosso estado na URL, uma coisa interessante que podemos fazer é ter um indicador de loading no campo de busca, para um feedback visual de que os dados estão sendo buscados.
Um bom candidato para isso é usar o par useTransition
/ startTransition
. Mas, antes, vamos entender rapidamente o que eles são.
O hook useTransition()
O Hook useTransition
nos retorna uma variável e uma função startTransition
:
const [isPending, startTransition] = useTransition();
isPending
é uma variável que indica se uma transição está em andamento. Você pode usá-la para mostrar um indicador de loading.
A função startTransition
serve para “envelopar” uma função que faz alguma alteração no estado da aplicação. Quando fazemos isso, estamos dizendo que aquela alteração é uma transição e não uma atualização imediata - ou seja, ela não é urgente.
Isso é importante porque faz com que essa atualização de estado não bloqueie a interface do usuário.
Três casos de uso
- Evitar que uma atualização de estado bloqueie a interface do usuário.
- Atualizações otimistas (optimistic ui).
- Indicação de loading - por exemplo, em um input de busca.
Onde não faz sentido usar?
- Não faz sentido usar
startTransition
em server components. - Não faz sentido usar
startTransition
quando você não está lidando com uma atualização de estado. - Não faz sentido usar
startTransition
quando as atualizações são críticas e devem ser feitas imediatamente.
A regra básica é que startTransition
serve para atualizações não urgentes e que podem ser adiadas ou interrompidas.