2017-03-13 142 views
4

react-router 4.0.0歷史provisoning似乎有所改變,具有以下index.js路由器歷史與反應路由器4.0.0

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

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

我得到:

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

事後錯誤。我瀏覽了代碼,但找不到任何示例或API如何改變。

回答

8

hashHistory不再是react-router的導出對象。如果您想使用哈希歷史記錄,則只需呈現<HashRouter>即可。

import { HashRouter } from 'react-router-dom' 

ReactDOM.render((
    <HashRouter> 
    <App /> 
    </HashRouter> 
), holder) 
+0

這將如何工作BrowserROuter和爲什麼沒有路徑定義? – Mahoni

+0

您只需用''替換''。 ''將被渲染在''組件的內部。 –

0

這是一個話題,其中RR文件應增加更多的清晰......要回答你的問題,你可以使用一個BrowserRouter,也可以使用路由器,它傳遞一個history實例。

當您的所有路線更改都是通過鏈接組件時,請採用第一種方法。

但是,當您需要更改商店方法中的路線時,您需要使用後一種方法。您可以編寫一個模塊來創建和導出歷史記錄對象,然後在您的路由器組件和存儲方法中使用相同的對象。使用相同的對象很重要,否則路由器將無法正確地將URL更改與商店同步。

+0

我認爲他們只是重寫整個文檔?所有以前的文檔已被刪除 – Mahoni

-3

你可以試試下面的代碼:

import { Router } from 'react-router' 
import createBrowserHistory from 'history/createBrowserHistory' 

const history = createBrowserHistory() 

<Router history={history}> 
    <App/> 
</Router> 

檢查doc這裏。

14

React Router v4改變了一些事情。他們製造了獨立的頂級路由器元件。在您的代碼中將<Router history={hashHistory}>替換爲<HashRouter>

希望這會幫助完整。

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

<HashRouter> 
    <Route path = "/getapp" component = {MainApp} /> 
</HashRouter> 
+0

它完美的作品,我想知道爲什麼akser沒有標記它是正確的! –