Pesquisa de site

Uma introdução à API React Context


Aprenda como compartilhar dados entre vários componentes da maneira certa.

A API React Context é uma ferramenta de gerenciamento de estado usada para compartilhar dados entre componentes React. Descubra como usar a API Context para monitorar usuários autenticados em componentes funcionais.

O que é a API React Context?

React é uma biblioteca baseada em componentes. Suas aplicações compreendem diferentes componentes que funcionam juntos. Em alguns casos, a sua aplicação precisa de partilhar dados entre estes componentes.

Por exemplo, você pode querer compartilhar o nome de usuário do usuário atual do componente Login com outros componentes do seu aplicativo. O contexto facilita o compartilhamento do nome de usuário, eliminando a necessidade de passar dados por cada componente na árvore de componentes.

Quando você deve usar a API React Context?

Antes de usar o contexto React, primeiro considere o tipo de dados com os quais você está trabalhando. O contexto é mais adequado para dados estáticos. Dados que mudam continuamente causarão muitas novas renderizações e, como resultado, reduzirão o desempenho. Os dados também devem ser globais ou pelo menos usados por muitos componentes, por exemplo, dados como idioma do usuário, temas e autenticação.

Usando o contexto para acompanhar o status de autenticação do usuário

Se o seu aplicativo usar autenticação, muitos de seus componentes precisarão saber o estado de autenticação do usuário atual. Transmitir o status de autenticação para cada componente é redundante e leva ao detalhamento de suporte, portanto, usar o contexto é uma boa opção.

criarContext()

Para começar a usar a API Context, primeiro você precisa criá-la usando esta sintaxe.

const Context = React.createContext(defaultValue);

O valor padrão é desnecessário e geralmente é usado para fins de teste.

Fornecedor

Cada contexto possui um provedor que recebe um valor consumido pelos componentes que ele encapsula. Ele permite que esses componentes assinem alterações de contexto.

<Context.Provider value={/* some value */}>

useContext

useContext() é um gancho React que permite que os componentes consumam contexto. Você só precisa passar no contexto.

const contextValue = useContext(Context)

Vamos agora criar o contexto de autenticação para acompanhar o estado de autenticação.

Comece criando um novo arquivo, AuthContext.js, e adicione o seguinte.

import { createContext } from "react";
const AuthContext = createContext();
export default AuthContext;

Em seguida, crie AuthProvider.js e adicione a função do provedor.

import { useState, useEffect } from 'react';
import { getUser } from './auth.js'
import AuthContext from './AuthContext'
export const AuthProvider = ({ children }) => {
    const [user, setUser] = useState(null);
    useEffect(() => {
 const currentUser = getUser()
 setUser(currentUser)
 }, []);
  
    return (
      <AuthContext.Provider value={{ user }}>{children}</AuthContext.Provider>
    );
  };

Aqui, você está recuperando o usuário atual de uma função getUser() falsa. Em uma aplicação real, este seria o seu serviço de back-end.

Armazene o usuário no estado atual para acompanhar quaisquer alterações e depois passe o usuário para o provedor na proposta de valor.

AuthProvider.js também recebe os filhos com acesso ao contexto.

A próxima etapa é criar um gancho personalizado que permitirá que os componentes agrupados com o provedor acessem o contexto.

Crie um novo arquivo useAuthContext.js e adicione o seguinte.

import AuthContext from "./AuthContext";
const useAuthContext.js = () => {
  const user = useContext(AuthContext);
  if (user === undefined) {
    throw new Error("useAuthContext can only be used inside AuthProvider");
  }
  return user;
};

Agora, se o código fora do provedor chamar AuthContext, seu aplicativo tratará o erro normalmente.

A etapa final é agrupar os componentes usando contexto com AuthProvider.js.

import { AuthProvider } from "./AuthContext";
ReactDOM.render(
  <React.StrictMode>
 <AuthProvider>
 <App />
 </AuthProvider>
  </React.StrictMode>,
  rootElement
);

Aqui está um exemplo de como você usaria o contexto para proteger uma página de usuários não autenticados.

import useAuthContext from "./useAuthContext";
import { Navigate } from "react-router-dom";
const Profile = () => {
  const { user } = useAuthContext();
  if (!user) {
    return <Navigate replace to="/login" />;
  }
  return (
    <>
      <h1>Profile</h1>
    </>
  );
};

Este componente renderiza condicionalmente a página de perfil dependendo do status de autenticação do usuário. Ele verifica se o usuário existe e, caso não exista, o redireciona para a página de login. Caso contrário, renderiza a página de perfil.

Quando não usar a API React Context

Neste artigo, você aprendeu como usar o Context para rastrear um usuário autenticado em todos os componentes. Embora você possa ficar tentado a usar o Context para todos os seus casos de uso de compartilhamento de dados, você não deveria, pois isso reduz a capacidade de manutenção e o desempenho do código. Cada vez que o valor do contexto muda, cada componente que consome o estado é re-renderizado. Se os dados forem usados apenas por alguns componentes, opte por adereços.

Artigos relacionados: