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 algumstatechamando uma ou mais funçõesset. React chamaactionimediatamente sem parâmetros e marca todas as atualizações destateagendadas de forma síncrona durante a chamada da funçãoactioncomo Transitions. Quaisquer chamadas assíncronas aguardadas noactionserão incluídas na transition, mas atualmente requerem encapsular quaisquer funçõessetapós oawaitem umstartTransitionadicional (veja Solução de problemas). Atualizações destatemarcadas como Transitions serão não bloqueantes e não exibirão indicadores de carregamento indesejados..
Retorna
startTransition não retorna nada.
Ressalvas
-
startTransitionnão fornece uma maneira de rastrear se uma Transition está pendente. Para mostrar um indicador pendente enquanto a Transition está em andamento, você precisa deuseTransitionem vez disso. -
Você pode encapsular uma atualização em uma Transition somente se tiver acesso à função
setdessestate. Se você deseja iniciar uma Transition em resposta a algumapropou um valor de retorno de um Hook customizado, tenteuseDeferredValueem vez disso. -
A função que você passa para
startTransitioné chamada imediatamente, marcando todas as atualizações destateque acontecem enquanto ela é executada como Transitions. Se você tentar executar atualizações destateem umsetTimeout, por exemplo, elas não serão marcadas como Transitions. -
Você deve encapsular quaisquer atualizações de
stateapós quaisquer solicitações assíncronas em outrostartTransitionpara marcá-las como Transitions. Esta é uma limitação conhecida que corrigiremos no futuro (veja Solução de problemas). -
Uma atualização de
statemarcada 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 destateda 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.