yönlendiriciye tepki verme v ^ 4.0.0 Yakalanmamış TypeError: Tanımsız 'konum' özelliği okunamıyor


91

React yönlendiriciyle ilgili bazı sorunlar yaşıyorum (^ 4.0.0 sürümünü kullanıyorum).

bu benim index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';
import { Router, Route, Link, browserHistory } from 'react-router';


ReactDOM.render(
  <Router history={browserHistory} >
    <Route path="/" component={App} />

  </Router>,
  document.getElementById('root')
);

App.js sadece her şeydir. Buraya temel olanı gönderiyorum, çünkü sorun bu değil (inanıyorum)

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';

class App extends Component {
  render() {
    return (
      <div className="App">
        <div className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h2>Welcome to React</h2>
        </div>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
      </div>
    );
  }
}

export default App;

ve konsol günlüğünü kontrol ettiğimde olan bu

Router.js:43 Uncaught TypeError: Cannot read property 'location' of undefined
    at new Router (Router.js:43)
    at ReactCompositeComponent.js:295
    at measureLifeCyclePerf (ReactCompositeComponent.js:75)
    at ReactCompositeComponentWrapper._constructComponentWithoutOwner (ReactCompositeComponent.js:294)
    at ReactCompositeComponentWrapper._constructComponent (ReactCompositeComponent.js:280)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:188)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)

oh, ve bu da package.json her ihtimale karşı

{
  "name": "teste2",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^15.4.2",
    "react-dom": "^15.4.2",
    "react-router": "^4.0.0"
  },
  "devDependencies": {
    "react-scripts": "0.9.5"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  }
}

Bunu başka yerlerde kontrol ediyordum ama çözmenin bir yolunu bulamadım.

Sabrınız ve yardımınız için çok teşekkür ederim !!

Yanıtlar:


240

Birkaç şeyi yanlış yapıyorsun.

  1. İlk olarak, browserHistory V4'te bir şey değildir, bu yüzden onu kaldırabilirsiniz.

  2. İkincisi, her şeyi kaynağından içe aktarıyorsunuz react-router, olmalı react-router-dom.

  3. Üçüncüsü, react-router-doma'yı dışa Routeraktarmaz, bunun yerine, BrowserRouterihtiyacınız olan a'yı dışa aktarır import { BrowserRouter as Router } from 'react-router-dom.

Görünüşe göre V3 uygulamanızı aldınız ve v4 ile çalışmasını beklediniz, ki bu harika bir fikir değil.


3
Bu tür bir durum haha. Udemy'deki bir kurstan öğreniyordum ve V3 kullandı. Bunu denedim, işe yaramadı. V4'te kullanmanın bir yolunu aradım ama bulabildiğim tek şey insanların bana indirmeyi söylemeleriydi. ben buraya böyle geldim. Her neyse, yardımlarınız için çok teşekkür ederim. Gerçekten minnettarım: D
Lucas fersa

Hey Tyler, aynısı için herhangi bir örnek kodunuz var mı?
MohammedAshrafali

Bu adımları izledikten sonra 4.1.1'de react-router'da aynı hatayı görüyorum. Kendim bir geçmiş nesnesi oluşturmam gerekir mi?
PDN

1
Teşekkürler dostum! cevabınızı okuyarak, react-router sürümü nedeniyle hata aldığımı öğrendim. V4 için iyi bir belge bulamadığım için, V3'e geçmeye karar verdim ve benim için istediğim gibi çalışmaya başladım
sergioviniciuss

@TylerMcGinnis "react-yönlendirici-dom bir Yönlendiriciyi dışa aktarmıyor " github.com/ReactTraining/react-router/blob/… react-yönlendirici-dom, kullanılması gerektiğini söyleyen bu uyarıyı veriyor Router.
corysimmons

6

Burada önerilen her şeyi denedim ama benim için çalışmadı. Bu nedenle, benzer bir sorunu olan herhangi birine yardımcı olabilirsem, kontrol ettiğim her öğretici sürüm 4 ile çalışacak şekilde güncellenmedi.

İşte çalışmasını sağlamak için yaptığım şey

import React from 'react';
import App from './App';

import ReactDOM from 'react-dom';
import {
    HashRouter,
    Route
} from 'react-router-dom';


 ReactDOM.render((
        <HashRouter>
            <div>
                <Route path="/" render={()=><App items={temasArray}/>}/>
            </div>
        </HashRouter >
    ), document.getElementById('root'));

Herhangi bir hata veya uyarı olmadan çalışmasını sağlamanın tek yolu bu.

Benim için bileşeninize destek vermek istemeniz durumunda en kolay yol şudur:

 <Route path="/" render={()=><App items={temasArray}/>}/>

Benzer bir kurulumum var ama açılış sayfamda ilk bileşenim menü bağlantısına hiç tıklamadan görünüyor. Bir soru
göndereceğim

4

Değiştir

import { Router, Route, Link, browserHistory } from 'react-router';

İle

import { BrowserRouter as Router, Route } from 'react-router-dom';

Çalışmaya başlayacak. Bunun nedeni, react-router-dom dışa aktarmasıdır BrowserRouter


React-router-dom react-router'ın yerini mi alıyor yoksa her ikisinin de yüklü olması gerekiyor mu?
JohnnyBizzle

Sadece react-router-dom'u tut
Ajay Poriya

0

yani bu kodu kullanmak isterseniz)

import { useRoutes } from "./routes";

import { BrowserRouter as Router } from "react-router-dom";

export const App = () => {

const routes = useRoutes(true);

  return (

    <Router>

      <div className="container">{routes}</div>

    </Router>

  );

};

// ./routes.js 

import { Switch, Route, Redirect } from "react-router-dom";

export const useRoutes = (isAuthenticated) => {
  if (isAuthenticated) {
    return (
      <Switch>
        <Route path="/links" exact>
          <LinksPage />
        </Route>
        <Route path="/create" exact>
          <CreatePage />
        </Route>
        <Route path="/detail/:id">
          <DetailPage />
        </Route>
        <Redirect path="/create" />
      </Switch>
    );
  }
  return (
    <Switch>
      <Route path={"/"} exact>
        <AuthPage />
      </Route>
      <Redirect path={"/"} />
    </Switch>
  );
};

2
merhaba, kodunuz hakkında bazı bilgiler eklemeyi düşünün, ne yaptığınızı açıklayın.
Gianmarco

Yönlendiriciyi klasörde, App.js'de içe aktarmada görebileceğiniz ad yollarıyla kullanıyorum ve bu kod kimlik doğrulamasında, eğer isAuthenticated () kullanıyorum. Ve işlevlerin App.js için yönlendiriciler kullanmasını sağladım
vipdanek

1
cevabınızı okuyan kullanıcıların durumun ve çözümün tam bir resmine sahip olmasına izin vermek için düzenleyin
Gianmarco
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.