以前我有介紹過使用vue路由來實現項目中的導航欄功能,在本案例中將以最基本的啓發模型來使用React路由實現一樣的功能,除此以外我還會介紹React的腳手架vue
我使用的開發工具是vscode,打開vscode,選擇終端打開react
npm i create-react-app -g
複製代碼
create-react-app my-app
複製代碼
在成功建立項目後,會提示你執行相應的命令來啓動頁面npm
或者執行下面命令bash
yarn start app
複製代碼
能夠看出,相比vue來講,React腳手架搭建項目結構仍是十分簡單的react-router
使用腳手架搭建好結構後,通常來講,咱們只須要修改src和public兩個目錄便可app
下面,我在src目錄只留下面兩個文件,其餘的均刪除dom
Appp.js工具
index.js開發工具
import React from 'react'
class App extends React.Component {
render() {
return (<h1>hello world</h1>)
}
}
// 導出根組件
export default App
複製代碼
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root')); 複製代碼
hello world
若是成功顯示,說明只留下這兩個文件是沒有問題的,下面正式開始實現導航欄測試
npm i react-router-dom
複製代碼
import React from 'react';
import Home from './Componemts/Home.jsx'
import User from './Componemts/User.jsx'
import Login from './Componemts/Login.jsx'
import { HashRouter, Route, Link ,Switch} from 'react-router-dom'
function App() {
return (
<div className="App">
<HashRouter>
<ul>
<li><Link to='/home'>首頁</Link></li>
<li><Link to='/user'>用戶</Link></li>
<li><Link to='/login'>登陸</Link></li>
</ul>
<Switch>
<Route path='/home' component={Home}/>
<Route path='/user' component={User}/>
<Route path='/login' component={Login}/>
</Switch>
</HashRouter>
</div>
);
}
export default App;
複製代碼
咱們能夠看到代碼中,引入了三個組件
import Home from './Componemts/Home.jsx'
import User from './Componemts/User.jsx'
import Login from './Componemts/Login.jsx'
複製代碼
在src
目錄下,新建一個Components
目錄,該目錄下新建下面三個文件
import React from 'react'
class Home extends React.Component{
render(){
return (
<div>我是首頁</div>
)
}
}
export default Home
複製代碼
import React from 'react'
class User extends React.Component{
render(){
return (
<div>我是用戶頁</div>
)
}
}
export default User
複製代碼
import React from 'react'
class Login extends React.Component{
render(){
return (
<div>我是登陸頁</div>
)
}
}
export default Login
複製代碼
好了到這一步,整個導航的啓發模型就已經寫好了,保存,刷新頁面就能夠看效果了
須要用到什麼就引入什麼,沒有用到的就不用引入,不然可能報錯
import { HashRouter, Route, Link ,Switch} from 'react-router-dom'
複製代碼
至於你用哪一個,能夠本身選擇,而在vue中,是沒有路由容器的,但能夠設置去掉#號
//HashRouter和BrowserRouter都是核心的路由容器
// HashRouter經過錨點來實現的,路徑帶了#
// BrowserRouter經過H5的history模式實現,路徑不帶#
複製代碼
// 路由匹配規則相關的組件有倆
//使用Switch把一組route包裹起來,保證只顯示一個組件
// Switch: 開關,
// Route: 表示一個匹配規則
複製代碼
若是咱們把App.j修改爲下面這樣,看會有怎麼樣顯示的效果
import React from 'react';
import Home from './Componemts/Home.jsx'
import User from './Componemts/User.jsx'
import Login from './Componemts/Login.jsx'
import { HashRouter, Route, Link ,Switch} from 'react-router-dom'
function App() {
return (
<div className="App">
<HashRouter>
<ul>
<li><Link to='/home'>首頁</Link></li>
<li><Link to='/home/aa'>用戶</Link></li>
<li><Link to='/login'>登陸</Link></li>
</ul>
<Route path='/home' component={Home}/>
<Route path='/home/aa' component={User}/>
<Route path='/login' component={Login}/>
</HashRouter>
</div>
);
}
export default App;
複製代碼
在點擊導航欄中的"用戶"時,頁面中會同時顯示"首頁","用戶"這兩個組件的內容
若是,咱們使用Switch將一組路由包起來
<Switch>
<Route path='/home' component={Home}/>
<Route path='/home/aa' component={User}/>
<Route path='/login' component={Login}/>
</Switch>
複製代碼
在點擊導航欄中的"用戶"時,頁面中只會顯示"首頁"這個組件的內容
因此在寫路由的時候,要注意這些問題
表示路由的重定向,使用時必定要加exact,exact表示精確匹配
咱們通常會在導航欄下面默認顯示首頁的內容
<Switch>
<Redirect exact from="/" to="/home" />
<Route path='/home' component={Home}/>
<Route path='/user' component={User}/>
<Route path='/login' component={Login}/>
</Switch>
複製代碼
若是咱們在重定向時,不加exact,那麼只要是/xxx的路由都匹配上