startTransition
startTransition
permite que você renderize uma parte da UI em background.
startTransition(action)
Referência
startTransition(action)
A função startTransition
permite que você marque uma atualização de estado como uma Transition.
import { startTransition } from 'react';
function TabContainer() {
const [tab, setTab] = useState('about');
function selectTab(nextTab) {
startTransition(() => {
setTab(nextTab);
});
}
// ...
}
Parâmetros
action
: Uma função que atualiza algumstate
chamando uma ou mais funçõesset
. React chamaaction
imediatamente sem parâmetros e marca todas as atualizações destate
agendadas de forma síncrona durante a chamada da funçãoaction
como Transitions. Quaisquer chamadas assíncronas aguardadas noaction
serão incluídas na transition, mas atualmente requerem encapsular quaisquer funçõesset
após oawait
em umstartTransition
adicional (veja Solução de problemas). Atualizações destate
marcadas como Transitions serão não bloqueantes e não exibirão indicadores de carregamento indesejados..
Retorna
startTransition
não retorna nada.
Ressalvas
-
startTransition
não fornece uma maneira de rastrear se uma Transition está pendente. Para mostrar um indicador pendente enquanto a Transition está em andamento, você precisa deuseTransition
em vez disso. -
Você pode encapsular uma atualização em uma Transition somente se tiver acesso à função
set
dessestate
. Se você deseja iniciar uma Transition em resposta a algumaprop
ou um valor de retorno de um Hook customizado, tenteuseDeferredValue
em vez disso. -
A função que você passa para
startTransition
é chamada imediatamente, marcando todas as atualizações destate
que acontecem enquanto ela é executada como Transitions. Se você tentar executar atualizações destate
em umsetTimeout
, por exemplo, elas não serão marcadas como Transitions. -
Você deve encapsular quaisquer atualizações de
state
após quaisquer solicitações assíncronas em outrostartTransition
para marcá-las como Transitions. Esta é uma limitação conhecida que corrigiremos no futuro (veja Solução de problemas). -
Uma atualização de
state
marcada como uma Transition será interrompida por outras atualizações destate
. Por exemplo, se você atualizar um componente de gráfico dentro de uma Transition, mas depois começar a digitar em uma entrada enquanto o gráfico está no meio de uma re-renderização, React reiniciará o trabalho de renderização no componente de gráfico após manipular a atualização destate
da entrada. -
Atualizações de Transition não podem ser usadas para controlar entradas de texto.
-
Se houver várias Transitions em andamento, React atualmente as agrupa. Esta é uma limitação que pode ser removida em uma versão futura.
Uso
Marcando uma atualização de state
como uma Transition não bloqueante
Você pode marcar uma atualização de state
como uma Transition encapsulando-a em uma chamada startTransition
:
import { startTransition } from 'react';
function TabContainer() {
const [tab, setTab] = useState('about');
function selectTab(nextTab) {
startTransition(() => {
setTab(nextTab);
});
}
// ...
}
Transitions permitem que você mantenha as atualizações da interface do usuário responsivas, mesmo em dispositivos lentos.
Com uma Transition, sua UI permanece responsiva no meio de uma re-renderização. Por exemplo, se o usuário clicar em uma aba, mas depois mudar de ideia e clicar em outra aba, ele pode fazê-lo sem esperar que a primeira re-renderização termine.