目录:
什么是路由?
路由分类
前端路由的基石.html
前端路由的基石_history
push test1
App.js
import React, {Component} from 'react';
import {Link, Route} from "react-router-dom";
import About from "./components/About/About";
import Home from "./components/Home/Home";
class App extends Component {
render() {
return (
React Router Demo
About
Home
);
}
}
export default App;
index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import {BrowserRouter} from "react-router-dom";
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
);
About.jsx
import React, {Component} from 'react';
class About extends Component {
render() {
return (
我是About的内容
);
}
}
export default About;
Home.jsx
import React, {Component} from 'react';
class Home extends Component {
render() {
return (
我是Home的内容
);
}
}
export default Home;
运行结果:
location:
match:|
Header.jsx
import React, {Component} from 'react';
class Header extends Component {
render() {
// console.log('Header组件收到的props是', this.props)
return (
React Router Demo
);
}
}
export default Header;
About.jsx
import React, {Component} from 'react';
class About extends Component {
render() {
// console.log('About组件收到的props是', this.props)
return (
我是About的内容
);
}
}
export default About;
Home.jsx
import React, {Component} from 'react';
class Home extends Component {
render() {
return (
我是Home的内容
);
}
}
export default Home;
App.js
import React, {Component} from 'react';
import {NavLink, Route} from "react-router-dom";
import About from "./pages/About/About";
import Home from "./pages/Home/Home";
import Header from "./components/Header/Header";
class App extends Component {
render() {
return (
About
Home
);
}
}
export default App;
index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import {BrowserRouter} from "react-router-dom";
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
);
index.html
React App
项目结构:
运行结果:
NavLink与封装NavLink
App.js
import React, {Component} from 'react';
import {NavLink, Route} from "react-router-dom";
import About from "./pages/About/About";
import Home from "./pages/Home/Home";
import Header from "./components/Header/Header";
import MyNavLink from "./components/MyNavLink/MyNavLink";
class App extends Component {
render() {
return (
About
Home
);
}
}
export default App;
index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import {BrowserRouter} from "react-router-dom";
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
);
Header.jsx
import React, {Component} from 'react';
class Header extends Component {
render() {
// console.log('Header组件收到的props是', this.props)
return (
React Router Demo
);
}
}
export default Header;
MyNavLink.jsx
import React, {Component} from 'react';
import {NavLink} from "react-router-dom";
class MyNavLink extends Component {
render() {
console.log(this.props)
return (
);
}
}
export default MyNavLink;
About.jsx
import React, {Component} from 'react';
class About extends Component {
render() {
// console.log('About组件收到的props是', this.props)
return (
我是About的内容
);
}
}
export default About;
Home.jsx
import React, {Component} from 'react';
class Home extends Component {
render() {
return (
我是Home的内容
);
}
}
export default Home;
项目结构:
运行结果:
Test.jsx
import React, {Component} from 'react';
class Test extends Component {
render() {
return (
Test...
);
}
}
export default Test;
App.js
import React, {Component} from 'react';
import {NavLink, Route, Switch} from "react-router-dom";
import About from "./pages/About/About";
import Home from "./pages/Home/Home";
import Header from "./components/Header/Header";
import MyNavLink from "./components/MyNavLink/MyNavLink";
import Test from "./pages/Test/Test";
class App extends Component {
render() {
return (
About
Home
);
}
}
export default App;
运行结果:
项目结构:
public/index.html 中引入样式时不写./写/(常用)
public/index.html 中引入样式时不写﹒/写%PUBLIC_URL%(常用)
使用HashRouter
1../css/bootstrap.css改为:
2../css/bootstrap.css改为:
3.BroserRouter改成HashRouter
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import {BrowserRouter, HashRouter} from "react-router-dom";
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
);
App.js
import React, {Component} from 'react';
import {Route, Switch} from "react-router-dom";
import About from "./pages/About/About";
import Home from "./pages/Home/Home";
import Header from "./components/Header/Header";
import MyNavLink from "./components/MyNavLink/MyNavLink";
class App extends Component {
render() {
return (
About
Home
);
}
}
export default App;
运行结果:
App.js
import React, {Component} from 'react';
import {Redirect, Route, Switch} from "react-router-dom";
import About from "./pages/About/About";
import Home from "./pages/Home/Home";
import Header from "./components/Header/Header";
import MyNavLink from "./components/MyNavLink/MyNavLink";
class App extends Component {
render() {
return (
About
Home
);
}
}
export default App;
App.js
import React, {Component} from 'react';
import {Redirect, Route, Switch} from "react-router-dom";
import About from "./pages/About/About";
import Home from "./pages/Home/Home";
import Header from "./components/Header/Header";
import MyNavLink from "./components/MyNavLink/MyNavLink";
class App extends Component {
render() {
return (
About
Home
);
}
}
export default App;
Message.jsx
import React, {Component} from 'react';
class Message extends Component {
render() {
return (
);
}
}
export default Message;
News.jsx
import React, {Component} from 'react';
class News extends Component {
render() {
return (
- news001
- news002
- news003
);
}
}
export default News;
Home.jsx
import React, {Component} from 'react';
import MyNavLink from "../../components/MyNavLink/MyNavLink";
import {Redirect, Route, Switch} from "react-router-dom";
import News from "./News/News";
import Message from "./Message/Message";
class Home extends Component {
render() {
return (
Home组件内容
-
News
-
Message
);
}
}
export default Home;
MyNavLink.jsx
import React, {Component} from 'react';
import {NavLink} from "react-router-dom";
class MyNavLink extends Component {
render() {
console.log(this.props)
return (
);
}
}
export default MyNavLink;
Header.jsx
import React, {Component} from 'react';
class Header extends Component {
render() {
// console.log('Header组件收到的props是', this.props)
return (
React Router Demo
);
}
}
export default Header;
About.jsx
import React, {Component} from 'react';
class About extends Component {
render() {
// console.log('About组件收到的props是', this.props)
return (
我是About的内容
);
}
}
export default About;
index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import {BrowserRouter, HashRouter} from "react-router-dom";
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
);
项目结构:
运行结果:
1.params参数
- 路由链接(携带参数):详情
- 注册路由(声明接收):
- 接收参数: const {id,title} = this.props.match.params
Header.jsx
import React, {Component} from 'react';
class Header extends Component {
render() {
// console.log('Header组件收到的props是', this.props)
return (
React Router Demo
);
}
}
export default Header;
MyNavLink.jsx
import React, {Component} from 'react';
import {NavLink} from "react-router-dom";
class MyNavLink extends Component {
render() {
console.log(this.props)
return (
);
}
}
export default MyNavLink;
About.jsx
import React, {Component} from 'react';
class About extends Component {
render() {
// console.log('About组件收到的props是', this.props)
return (
我是About的内容
);
}
}
export default About;
Detail.jsx
import React, {Component} from 'react';
const DetailData = [
{id: '01', content: '你好,中国'},
{id: '02', content: '你好,尚硅谷'},
{id: '03', content: '你好,未来的自己'},
]
class Detail extends Component {
render() {
// console.log(this.props)
const {id, title} = this.props.match.params
const findResult = DetailData.find((detailObj) => {
return detailObj.id === id
})
return (
- ID:{id}
- TITLE:{title}
- CONTENT:{findResult.content}
);
}
}
export default Detail;
Message.jsx
import React, {Component} from 'react';
import Detail from "./Detail/Detail";
import {Link, Route} from "react-router-dom";
class Message extends Component {
state = {
messageArr: [
{id: '01', title: '消息1'},
{id: '02', title: '消息2'},
{id: '03', title: '消息3'},
]
}
render() {
const {messageArr} = this.state
return (
{
messageArr.map((msgObj) => {
return (
-
{msgObj.title}
)
})
}
);
}
}
export default Message;
News.jsx
import React, {Component} from 'react';
class News extends Component {
render() {
return (
- news001
- news002
- news003
);
}
}
export default News;
Home.jsx
import React, {Component} from 'react';
import MyNavLink from "../../components/MyNavLink/MyNavLink";
import {Redirect, Route, Switch} from "react-router-dom";
import News from "./News/News";
import Message from "./Message/Message";
class Home extends Component {
render() {
return (
Home组件内容
-
News
-
Message
);
}
}
export default Home;
App.js
import React, {Component} from 'react';
import {Redirect, Route, Switch} from "react-router-dom";
import About from "./pages/About/About";
import Home from "./pages/Home/Home";
import Header from "./components/Header/Header";
import MyNavLink from "./components/MyNavLink/MyNavLink";
class App extends Component {
render() {
return (
About
Home
);
}
}
export default App;
index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import {BrowserRouter, HashRouter} from "react-router-dom";
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
);
运行结果:
项目结构:
2.search参数
Message.jsx
import React, {Component} from 'react';
import Detail from "./Detail/Detail";
import {Link, Route} from "react-router-dom";
class Message extends Component {
state = {
messageArr: [
{id: '01', title: '消息1'},
{id: '02', title: '消息2'},
{id: '03', title: '消息3'},
]
}
render() {
const {messageArr} = this.state
return (
{
messageArr.map((msgObj) => {
return (
-
{/*{msgObj.title}*/}
{msgObj.title}
)
})
}
{/* */}
);
}
}
export default Message;
Detail.jsx
import React, {Component} from 'react';
import qs from "qs"
const DetailData = [
{id: '01', content: '你好,中国'},
{id: '02', content: '你好,尚硅谷'},
{id: '03', content: '你好,未来的自己'},
]
class Detail extends Component {
render() {
console.log(this.props)
// const {id, title} = this.props.match.params
const {search} = this.props.location
const {id, title} = qs.parse(search.slice(1))
const findResult = DetailData.find((detailObj) => {
return detailObj.id === id
})
return (
- ID:{id}
- TITLE:{title}
- CONTENT:{findResult.content}
);
}
}
export default Detail;
运行结果:
项目结构:
state参数:
Message.jsx
import React, {Component} from 'react';
import Detail from "./Detail/Detail";
import {Link, Route} from "react-router-dom";
class Message extends Component {
state = {
messageArr: [
{id: '01', title: '消息1'},
{id: '02', title: '消息2'},
{id: '03', title: '消息3'},
]
}
render() {
const {messageArr} = this.state
return (
{
messageArr.map((msgObj) => {
return (
-
{/*{msgObj.title}*/}
{/*{msgObj.title}*/}
{msgObj.title}
)
})
}
{/* */}
{/* */}
);
}
}
export default Message;
Detail.jsx
import React, {Component} from 'react';
import qs from "qs"
const DetailData = [
{id: '01', content: '你好,中国'},
{id: '02', content: '你好,尚硅谷'},
{id: '03', content: '你好,未来的自己'},
]
class Detail extends Component {
render() {
console.log(this.props)
// const {id, title} = this.props.match.params
// const {search} = this.props.location
// const {id, title} = qs.parse(search.slice(1))
const {id, title} = this.props.location.state || {}
const findResult = DetailData.find((detailObj) => {
return detailObj.id === id
}) || {}
return (
- ID:{id}
- TITLE:{title}
- CONTENT:{findResult.content}
);
}
}
export default Detail;
运行结果:
Message.jsx
import React, {Component} from 'react';
import Detail from "./Detail/Detail";
import {Link, Route} from "react-router-dom";
class Message extends Component {
state = {
messageArr: [
{id: '01', title: '消息1'},
{id: '02', title: '消息2'},
{id: '03', title: '消息3'},
]
}
render() {
const {messageArr} = this.state
return (
{
messageArr.map((msgObj) => {
return (
-
{/*{msgObj.title}*/}
{/*{msgObj.title}*/}
{msgObj.title}
)
})
}
{/* */}
{/* */}
);
}
}
export default Message;
Message.jsx
import React, {Component} from 'react';
import Detail from "./Detail/Detail";
import {Link, Route} from "react-router-dom";
class Message extends Component {
state = {
messageArr: [
{id: '01', title: '消息1'},
{id: '02', title: '消息2'},
{id: '03', title: '消息3'},
]
}
render() {
const {messageArr} = this.state
return (
{
messageArr.map((msgObj) => {
return (
-
{/*{msgObj.title}*/}
{/*{msgObj.title}*/}
{msgObj.title}
)
})
}
{/* */}
{/* */}
);
}
}
export default Message;
Detail.jsx
import React, {Component} from 'react';
import qs from "qs"
const DetailData = [
{id: '01', content: '你好,中国'},
{id: '02', content: '你好,尚硅谷'},
{id: '03', content: '你好,未来的自己'},
]
class Detail extends Component {
render() {
console.log(this.props)
// const {id, title} = this.props.match.params
// const {search} = this.props.location
// const {id, title} = qs.parse(search.slice(1))
const {id, title} = this.props.location.state || {}
const findResult = DetailData.find((detailObj) => {
return detailObj.id === id
}) || {}
return (
- ID:{id}
- TITLE:{title}
- CONTENT:{findResult.content}
);
}
}
export default Detail;
News.jsx
import React, {Component} from 'react';
class News extends Component {
componentDidMount() {
setTimeout(() => {
this.props.history.push('/home/message')
}, 2000)
}
render() {
return (
- news001
- news002
- news003
);
}
}
export default News;
Header.jsx
import React, {Component} from 'react';
import {withRouter} from "react-router-dom";
class Header extends Component {
back = () => {
this.props.history.goBack()
}
forward = () => {
this.props.history.goForward()
}
go = () => {
this.props.history.go(2)
}
render() {
// console.log('Header组件收到的props是', this.props)
return (
React Router Demo
);
}
}
export default withRouter(Header);