Estado de Navegação no React Router
Se clicarmos nos produtos da lista, vermos que na primeira vez a página do produto é carregada com um atraso, e nas demais vezes já é rápido, o mesmo acontece ao adicionar e atualizar um produto, pois temos um cache do lado do cliente.
Nesta lição, mostraremos ao usuário
em que estado nossa página se encontra.
Para isso, podemos usar o hook
useNavigation. Esse hook retorna
um objeto com uma série de propriedades.
Estaremos interessados em uma delas - a propriedade state.
A propriedade state pode ter 3
valores: 'idle' (nada está acontecendo),
'submitting' (quando, no envio de um formulário
via POST, PUT, PATCH ou DELETE, uma action
da rota é chamada), 'loading' (quando o
loader para a próxima rota é chamado para
renderizar a próxima página). Estaremos
interessados no último valor.
Vamos para o arquivo root.jsx e
importar este hook:
import { useNavigation } from 'react-router-dom';
Em seguida, para o resultado retornado pelo hook,
criaremos uma variável navigation na função
Root - antes do return:
const { products } = useLoaderData();
const navigation = useNavigation();
E agora vamos usar sua propriedade
state. Se o valor for
'loading', definiremos a classe
loading para a div onde os
dados do produto estão sendo renderizados:
<div id="product" className={navigation.state === 'loading' ? 'loading' : ''}>
<Outlet />
</div>
Só nos falta adicionar estilos para
a classe loading no index.css. Vamos
simplesmente aumentar a opacity
no estado de carregamento:
div.loading {
opacity: 0.3;
}
Agora, se recarregarmos o site e clicarmos nos produtos da lista ou, por exemplo, adicionarmos um novo produto, veremos que a página atual ficará levemente transparente por um momento, antes da próxima aparecer.
Pegue o aplicativo criado por você nas
tarefas das lições anteriores. Usando os
materiais da lição, com o hook
useNavigation, faça com que
o usuário possa ver que a próxima
página com os dados do estudante
está sendo carregada.