Remix R Logo

Este conteúdo é parte integrante do curso

Aprenda Remix com Fabio Vedovelli

voltar

Título: Utilizando Context API e UseMatches para gerenciar dados em aplicações Remix.run

Ao desenvolver uma aplicação com Remix.run, é comum que precisemos acessar dados em pontos específicos da aplicação, independente da hierarquia de componentes. Neste artigo, abordaremos três maneiras de fazer isso: utilizando a Context API do React e duas das formas nativas do Remix, useMatches e useRouteData.

Context API do React

Para exemplificar a utilização da Context API, vamos supor que temos um usuário logado e queremos inserir informações desse usuário dentro de um formulário. O primeiro passo é analisar a hierarquia de rotas do Remix, usando o comando npx remix routes. Em nosso exemplo, a hierarquia de rotas vai da rota root até a rota /users/form, que retorna o componente UserForm.

<Routes>
  <Route file="root.tsx"> <<< PRIMEIRO NÍVEL
    <Route path="products/clear-cart" file="routes/products.clear-cart.tsx" />
    <Route path="checkout" file="routes/checkout.tsx" />
    <Route path="products" file="routes/products.tsx" />
    <Route path="payment" file="routes/payment.tsx">
      <Route path="success" file="routes/payment/success.tsx" />
      <Route index file="routes/payment/index.tsx" />
    </Route>
    <Route path="logout" file="routes/logout.tsx" />
    <Route index file="routes/index.tsx" />
    <Route path="login" file="routes/login.tsx" />
    <Route path="users" file="routes/users.tsx"> <<< SEGUNDO NÍVEL
      <Route path="form" file="routes/users/form.tsx" /> <<< TERCEIRO NÍVEL
    </Route>
  </Route>
</Routes>

Após criar um arquivo chamado /app/features/Users/context.ts, podemos definir a interface para o UserContext e criar o contexto utilizando createContext do React. Em seguida, no componente root, vamos buscar o usuário logado através do loader e passar essa informação para o UserContext.Provider.

Com o contexto pronto, podemos acessar o usuário logado em qualquer componente, como o UserForm, utilizando o hook useContext do React. Para evitar repetições e simplificar o acesso ao usuário logado, podemos criar um hook personalizado chamado useLoggedUser dentro do arquivo context.ts. Dessa forma, basta importar e utilizar o hook useLoggedUser nos componentes necessários.

UseMatches do Remix:

Agora vamos explorar a forma nativa do Remix para gerenciar dados, utilizando o hook UseMatches. Esse hook nos permite acessar os dados retornados pelos loaders de todas as rotas da hierarquia até o ponto de execução da aplicação.

Para utilizá-lo, primeiro importe useMatches do remix run react. No exemplo, podemos acessar o usuário logado e a lista de usuários da seguinte forma:

const [root, users] = useMatches();
const loggedUser = root.data.loggedUser;
const usersList = users.data.users;

Da mesma forma que fizemos com o contexto, podemos criar hooks personalizados para simplificar o acesso aos dados. Por exemplo, podemos criar os hooks useLoggedUser e useUsersList no arquivo hooks.tsx, que utilizam useMatches internamente.

Conclusão

Tanto a Context API do React quanto o UseMatches do Remix são maneiras eficientes de gerenciar dados em aplicações Remix.run. A escolha entre as duas dependerá de suas preferências e experiências anteriores. A Context API pode ser mais familiar e fácil de reutilizar em diferentes projetos, enquanto o UseMatches é uma solução nativa do Remix que pode facilitar o acesso aos dados das rotas.

voltar

Seja notificado quando tivermos novidades.

Jamais enviaremos spam e você pode sair quando quiser.