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.