2017-03-16 23 views
13

Tyler Mcginnis'in eğitimlerini takip ettim ve özellikle geçmişle birlikte tepki veren yönlendiriciyle bir başıma çarptım. Bu beni sadece olsaydı sadece görmek için aynen onun kodunu kopyalayarak sona erdi, ama hâlâ uygulamasıdırReact Router başarısız oldu 'geçmiş', undefined

Warning: React.createElement: type is invalid -- expected a string (for built- 
in components) or a class/function (for composite components) but got: 
undefined. You likely forgot to export your component from the file it's 
defined in. 

Warning: Failed prop type: The prop `history` is marked as required in 
`Router`, but its value is `undefined`. in Router 

Uncaught TypeError: Cannot read property 'location' of undefined 
at new Router (index_bundle.js:8347) 
at index_bundle.js:19079 
at measureLifeCyclePerf (index_bundle.js:18859) 
at ReactCompositeComponentWrapper._constructComponentWithoutOwner (index_bundle.js:19078) 
at ReactCompositeComponentWrapper._constructComponent (index_bundle.js:19064) 
at ReactCompositeComponentWrapper.mountComponent (index_bundle.js:18972) 
at Object.mountComponent (index_bundle.js:4070) 
at ReactCompositeComponentWrapper.performInitialMount (index_bundle.js:19155) 
at ReactCompositeComponentWrapper.mountComponent (index_bundle.js:19042) 
at Object.mountComponent (index_bundle.js:4070) 

alıyorum: Ben hashHistory bulunmadığını fark etti ne

var React = require('react'); 
var ReactRouter = require('react-router'); 
var Router = ReactRouter.Router; 
var Route = ReactRouter.Route; 
var hashHistory = ReactRouter.hashHistory; 
var IndexRoute = ReactRouter.IndexRoute; 
var Main = require('../components/Main'); 
var Home = require("../components/Home"); 
var PromptContainer = require('../containers/PromptContainer'); 

var routes = (
    <Router history={hashHistory}> 
    <Route path='/' component={Main}> 
     <IndexRoute component={Home} /> 
     <Route path='playerOne' header='Player One' component={PromptContainer} /> 
     <Route path='playerTwo/:playerOne' header='Player Two' component={PromptContainer} /> 
    </Route> 
    </Router> 
); 

module.exports = routes; 

react-router modülünde, ancak history modülünde createBrowserHistory vardır. O bir createBrowserHistory is not a function hata üretir yapmak

var BrowserHistory = require('history/createBrowserHistory); 
const history = createBrowserHistory(); 

: buldum API doc ardından, ben orada aracılığıyla çağırmalıdır düşündüm. Parantezin kaldırılması, tarihin belirtildiği gibi aynı hatalarla sonuçlanır undefined.

Geçmişi günlüğe kaydettiğimde, kesinlikle tanımlanmamıştır, bu da sorunun içe aktarma ifadesiyle ilgili olduğuna inanıyor, ancak konsolun bana ReactRouter.hashHistory bulunamadığı söylenemez mi?

Bu öğreticinin bir yıllık olduğunu ve muhtemelen farkında olmadığım API'da değişiklikler olduğunu anlıyorum ve sorunum burada yatıyor. Herhangi bir yardım takdir edilir!

cevap

32

Yönlendirici v4

import { HashRouter as Router, Route } from 'react-router-dom'; 
import App from './components/App'; 

render(( 
    <Router> 
    <Route exact path="/" component={App} /> 
    </Router>), 
document.getElementById('root')); 

HashHistory veya

import { BrowserRouter as Router, Route } from 'react-router-dom'; 
import App from './components/App'; 

render(( 
    <Router> 
    <Route exact path="/" component={App} /> 
    </Router>), 
document.getElementById('root')); 
+1

Bu öğreticiyi tamamlamak için v3'e geri dönüyorum, sonra v4 API'ye geçeceğim, ancak bu değişikliklerin yapıldığını bilmek güzel. Bunu cevap olarak işaretleyeceğim, başkalarının görebileceği, teşekkürler! – JoeDahle

+0

Birden çok yol hata veriyor: "Yakalanmayan Hata: yalnızca bir alt öğeye sahip olabilir". Bunu nasıl düzeltebilirim? – olefrank

+0

@olefrank, yönlendiricinin hangi sürümü? [Bu size yardımcı olabilir] (https://github.com/ReactTraining/react-router/issues/4131), yönlendiricide 'Switch' etiketi ile bir cevap var. – Nicholas

0
var BrowserHistory = require('history/createBrowserHistory'); 
const history = createBrowserHistory(); 

demek istiyorsun var createBrowserHistory = require... ?

da, bu createBrowserHistory gibi göründüğünü çalışmazsa history/lib/createBrowserHistory

bulunan (v3 olarak) şimdi - Kullandığınız react-router hangi sürümü?

+1

BrowserHistory farklı biraz Sağ, createbrowserhistory .... O bölümü kopyalayıp yapıştırın vermiyordu. Tarih sürüm 4.6.1 kullanıyorum ve/lib'de de yok. Reactrouter v 4.0.0 – JoeDahle

+0

@JoeDahle evet, v4 bir şeylerin * çok * kırdı. Bir yıldan beri bir rehberi takip ediyorsanız, v3'ü kullanırdım. –

+0

Her şeyi kıran v4'tür, v3.0.2'ye geri döndüm ve her şey beklendiği gibi çalışıyor, teşekkürler! – JoeDahle