Coder Social home page Coder Social logo

uesleisuptitz / multiple-routes-with-the-same-context Goto Github PK

View Code? Open in Web Editor NEW
7.0 1.0 1.0 484 KB

Um contexto...várias rotas. Esse projeto serve para demonstrar como é possível usar um mesmo contexto em múltiplas rotas sem precisar envolver toda a aplicação.

HTML 35.12% JavaScript 64.88%
react reactjs context-api context reactrouter reactrouterdom react-router react-router-dom

multiple-routes-with-the-same-context's Introduction

Multiplas rotas com o mesmo contexto

Múltiplas rotas com o mesmo contexto

Esse projeto foi desenvolvido para demonstrar como é possível usar um contexto em mais de uma rota, porém de forma que o mesmo contexto sirva para todas as rotas.

Exemplo

<Router>
  <Switch>
    <Route exact path="/">
      <Home />
    </Route>
    <Route exact path="/produtos">
      <Produtos />
    </Route>
    {/* Este código causa um erro! */}
    {/* Já que um <Switch> só aceita elementos <Route> ou <Redirect> */}
    {/* E abaixo temos um <MyContextProvider> */}
    <MyContextProvider>
      <Route exact path="/produto">
        <Produto />
      </Route>
      <Route exact path="/editar-produto">
        <EditarProduto />
      </Route>
    </MyContextProvider>
  </Switch>
</Router>

Solução

Unir todas as rotas que precisam do mesmo contexto em um único elemento <Route>. Para fazer isso podemos seguir alguns passos:

  • Juntar todos os paths e passar para o elemento <Route> como um array
  • Colocar os componentes de tela dentro do método render do <Route>
  • Usar as props do método render para identificar qual componente deve ser exibido e retornado.

O código abaixo ilustra o que deve ser feito:

<Router>
  <Switch>
    <Route exact path="/">
      <Home />
    </Route>
    <Route exact path="/produtos">
      <Produtos />
    </Route>
    <Route
      exact
      path={["/produto", "/editar-produto"]}
      render={(props) => {
        const {
          location: { pathname },
        } = props;
        return (
          <MyContextProvider>
            {pathname.includes("/produto") ? (
              <Produto />
            ) : pathname.includes("/editar-produto") ? (
              <EditarProduto />
            ) : (
              <Redirect to="/" />
            )}
          </MyContextProvider>
        );
      }}
    />
  </Switch>
</Router>

Atenção!

Cuidado ao fazer if dentro das rotas da sua aplicação, pois se você não retornar um componente nas rotas, as rotas abaixo podem não funcionar corretamente. Retornar só o contexto pode gerar problemas!

Tecnologias

As seguintes tecnologias foram usadas na construção do projeto:

Pré-requisitos

Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:

Passo a passo

Pelo terminal:

  • Faça o clone do projeto em algum local da sua máquina. Exemplo: user/projetos
  • Vá até a pasta que você acabou de clonar. Exemplo: cd user/projetos/multiple-routes-with-the-same-context
  • Utilizando npm ou yarn, instale as dependências do projeto. Exemplo: execute o comando yarn ou npm i
  • Agora, basta executar yarn start ou npm run start e o projeto vai ser executado. Ele vai executar em http://localhost:3000/

Autor

Uéslei Suptitz, amante de desenvolvimento.

multiple-routes-with-the-same-context's People

Contributors

uesleisuptitz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

tiagobehenck

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.