Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

15
respostas

As orientações não funcionam mais na versão atual do react-router

As orientações não funcionam mais na versão atual do "react-router", segui uma orientação no fórum do vídeo passado e utilizei o "react-router-dom" mas algumas coisas não consegui resolver, por exemplo:

{this.props.children}

15 respostas

Oi Bruno, vou parar para ver isso certinho e atualizar o que for necessario no texto.

Infelizmente não consegui prosseguir com o curso, pois os passos dados pelo professor não estão funcionando.

Espero resolução para realizar a finalização do curso.

Oi Adonai, vc usou a versão 2 do router? pergunto pq essa é justamente a que está especificada no curso. Vou trabalhar para atualizar o curso, mas os conceitos são os mesmos, não precisa parar por conta disso.

Basta rodar o npm install assim:

npm install react-router@2.7.0

Pessoal, me ajudem aqui. Qual é exatamente o problema que está dando no projeto de vocês com a versão atual do router?

O meu até que está funcionando na 2.7.0 mais está apresentando 2 warnings:

warning.js:36 Warning: Accessing PropTypes via the main React package is deprecated. Use the prop-types package from npm instead.

warning.js:36 Warning: RouterContext: React.createClass is deprecated and will be removed in version 16. Use plain JavaScript classes instead. If you're not yet ready to migrate, create-react-class is available on npm as a drop-in replacement.

Obrigado Elias, isso vem da atualização do React mesmo. Vou colocar uma nota na explicação! Quem teve problemas com o router, tenta me explicar exatamente o que apareceu também :).

Alberto eu atualizei pra versão 4.0.0, que segundo o github do react-router é a última, e foi apresentado os seguintes erros (espero que seja isso que você esteja perguntando de fato):

Warning: Failed prop type: The prop `history` is marked as required in `Router`, but its value is `undefined`.
    in Router (at index.js:11)
printWarning @ bundle.js:11907


bundle.js:34184 Uncaught TypeError: Cannot read property 'location' of undefined
    at new Router (bundle.js:34184)
    at bundle.js:26449
    at measureLifeCyclePerf (bundle.js:26229)
    at ReactCompositeComponentWrapper._constructComponentWithoutOwner (bundle.js:26448)
    at ReactCompositeComponentWrapper._constructComponent (bundle.js:26434)
    at ReactCompositeComponentWrapper.mountComponent (bundle.js:26342)
    at Object.mountComponent (bundle.js:18760)
    at ReactCompositeComponentWrapper.performInitialMount (bundle.js:26525)
    at ReactCompositeComponentWrapper.mountComponent (bundle.js:26412)
    at Object.mountComponent (bundle.js:18760)

Eu instalei o "react-router" mais parece que ele é voltado para React Native que visa a plataforma Mobile, e eles pedem para usar o "react-router-dom" para Web.

Vou reinstalar e verificar os problemas.

Opa Elias, obrigado. Era isso mesmo :). Eles criaram o react-router-dom agora, voltado para web... O router ficou só o core... Valeu pela ajuda!

Fala Alberto... então eu ralei aqui e cheguei a seguinte definição, que funcionou (se tiver algo que eu fiz errado me avise):

index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

App.js:

import React, { Component } from 'react';
import './css/pure-min.css';
import './css/side-menu.css';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom'
import AutorBox from './Autor';
import Home from './Home';
import LivroBox from './Livro';

export default class App extends Component {

  render() {
    return (      

      <Router>
        <div id="layout">
          <a href="#menu" id="menuLink" className="menu-link">
            <span></span>
          </a>

          <div id="menu">
            <div className="pure-menu">
              <a className="pure-menu-heading" href="#">Company</a>

              <ul className="pure-menu-list">
                <li className="pure-menu-item"><Link to="/" className="pure-menu-link">Home</Link></li>
                <li className="pure-menu-item"><Link to="/autor" className="pure-menu-link">Autor</Link></li>
                <li className="pure-menu-item"><Link to="/livro" className="pure-menu-link">Livro</Link></li>
              </ul>

            </div>
          </div>

          <Route exact path="/" component={Home} />
          <Route path="/autor" component={AutorBox} />
          <Route path="/livro" component={LivroBox} />
        </div>
      </Router>
    );
  }
}

Alberto, por gentileza atualize o curso, as instruções não estão corretas, pois quando instalamos o react-router(Que pode até funcionar, mas é mais fácil usar react-router-dom) nenhum ponto que tu menciona funciona mais, tendo em vista a versão >4 . Coloquei do jeito que @Elias Gervasio mencionou e funcionou. Contudo gostaria de saber como faz para colocar o Router no index.js com a hierarquia, entende...

Pessoal, o curso foi gravado dando suporte ate a versao 3, inclusive especificado no exercicio do router. O 4 mudou coisas que necessitam uma nova organizacao, por enquanto impossibilitando a atualizacao rapida. Deixei inclusive uma observacao no exercicio.

Obrigado a todos pelas observacoes.

esse video me ajudou: https://www.youtube.com/watch?v=Zjacr7_GZR0

espero que em breve o professor roberto post algo mais didatico e explique as mudanças no RR4

Alberto, tentei usar a 2.7 mas ocorre o seguinte erro: "Module not found: [CaseSensitivePathsPlugin] `"

Opa, module not found gera eh reflexo da falta de algum npm install. Eu apagaria a pasta node_modules e mandaria o npm install de novo.