React Router
| Description | |
|---|---|
react-router |
React Router核心api |
react-router-dom |
React Router的DOM绑定,在浏览器中运行不需要额外安装react-router |
react-router-native |
React Native 中使用,而实际的应用中,其实不会使用这个。 |
react-router-config |
* Route是用来通过path路径来匹配对应的组件,一个Route组件就是一个路由的配置
* path 路由路径
* component 路由对应的组件
* render 可以渲染一个组件
* children 子组件
component / render /children 选一个使用
* component vs render vs children
1. 使用了Route并使用了component属性之后,我们的组件称之为路由组件,有路由属性【 history/location/match 】
2. 使用render的话,我们发现组件的路由属性是没有的,但是我们可以给我们的组件绑定数据了
3. 使用children的话,我们不仅可以绑定数据,也可以有路由属性
* Switch表示一次只渲染一个路由
* Redirect 重定向组件
exact 它表示路径完全匹配
src/LayOut文件/index.js:
src/componments/tabbar
import React from 'react' import './index.scss' /* * react-router-dom中导航跳转的组件给了两个 * Link 用于页面跳转,但是导航不激活 * NavLink 用于页面跳转,但是导航激活 * Link / NavLink * to Object/String * NavLink有一个activeClassName属性 */ import { NavLink } from 'react-router-dom' const TabBar = props => { const navs = [ { id: 1, iconName: 'fa-home', path: '/home', text: '首页' }, { id: 2, iconName: 'fa-hand-peace', path: '/recommend', text: '推荐' }, { id: 3, iconName: 'fa-gifts', path: '/category', text: '分类' }, { id: 4, iconName: 'fa-shopping-cart', path: '/shopcar', text: '购物车' }, { id: 5, iconName: 'fa-user-secret', path: '/mine', text: '我的' } ] function renderNav () { return navs.map( item => ( <li key = { item.id } > <NavLink to = { item.path } activeClassName = 'active' > <i className = { 'fas ' + item.iconName }></i> <span> { item.text } </span> </NavLink> </li> )) } return ( <footer> <ul> { renderNav() } </ul> </footer> ) } export default TabBar
src/index.js
import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import * as serviceWorker from './serviceWorker'; /* * 1. React路由模式有两种: HashRouter[ #/home 传统浏览器模式 hashchange ] BrowserRouter[ /home h5 history模式 ] * BrowserRouter需要后端支持 * as的作用是给一个模块起一个别名 */ import { BrowserRouter as Router } from 'react-router-dom' ReactDOM.render( <Router> <App /> </Router> , document.getElementById('root')); serviceWorker.unregister();
二级路由
src/pages/home/index.js
import React, { Component } from 'react'
import './index.scss'
import Nav from './Nav'
import { Route,Redirect } from 'react-router-dom'
import Hot from './Hot';
import Comming from './Comming';
export default class Home extends Component {
render() {
return (
<div className = "container">
{/* 导航 */}
<Nav/>
{/* 路由展示区域 */}
{/* <Redirect from = "/home" to = "/home/hot" exact/> */}
<Route path = "/home/hot" component = { Hot } />
<Route path = "/home/comming" component = { Comming } />
</div>
)
}
}
src/pages/home/Nav.js
import React from 'react' import { NavLink } from 'react-router-dom' const Nav = props => { return ( <div className = "nav"> <NavLink to = "/home/hot" activeClassName = "active"> 正在热映 </NavLink> <NavLink to = "/home/comming" activeClassName = "active"> 即将上映 </NavLink> </div> ) } export default Nav
src/pages/home/Hot.js
import React, { Component } from 'react'
export default class Comming extends Component {
render() {
return (
<div>
即将上映
</div>
)
}
}

浙公网安备 33010602011771号