路由植入
路由安装
1、安装包
yarn add react-router-dom;
react-router 分native 和 web 端
直接使用 web端
新增加Router.js
vi src/Router.js
import React from 'react';
import { BrowserRouter, HashRouter} from 'react-router-dom';
import App from './App.js';
const Router = () => (
<BrowserRouter>
<App/>
</BrowserRouter>
)
export default Router;
这个js 目前作用就是管理路由模式一种是hash 一种是Browser
后期的mobx 或redux 可以直接在<App/> 入口注入
修改index.js
src/index.js
原来的 index.js 直接引入 App.js
如今多了一步
index.js--->Router.js--->App.js
引入 import Router from './Router';
使用
<Router />
import React from 'react';
import ReactDOM from 'react-dom';
import './styles/index.css';
import Router from './Router';
import reportWebVitals from './reportWebVitals';
ReactDOM.render(
<React.StrictMode>
<Router />
</React.StrictMode>,
document.getElementById('root')
);
reportWebVitals();
改造App.js
import React, { Component } from 'react';
import { withRouter,NavLink,Switch,Redirect,Route} from 'react-router-dom';
import Home from './views/Home';
import Test from './views/Test';
class App extends Component {
render(){
return(
<Switch>
<Route exact path="/" component={Home} />
<Route path="/test" component={Test} />
<Redirect to="/"/>
</Switch>
)
}
}
export default App;
react/first-react/src/App.js
import React, { Component } from 'react';
import { withRouter,NavLink,Switch,Redirect,Route} from 'react-router-dom';
import Home from './views/Home';
import Test from './views/Test';
import Input2 from './views/Input2';
import Web2008a from './views/Web2008a';
import Web from './views/Web';
import Tab from './views/Tab';
class App extends Component {
render(){
return(
<Switch>
<Route exact path="/" component={Home} />
<Route path="/test" component={Test} />
<Route path="/input2" component={Input2} />
<Route exact path="/web2008a" component={Web2008a} />
<Route path={`/web2008a/:uid`} component={Web2008a} />
<Route exact path="/web" component={Web} />
<Route exact path={`/web/:cls`} component={Web} />
<Route path={`/web/:cls/:uid`} component={Web} />
<Redirect to="/"/>
</Switch>
)
}
}
export default App;
react/first-react/src/views/Web2008a/index.jsx
import React, { Component } from 'react';
import List from './List.jsx';
import Detail from './Detail.jsx';
class View extends Component {
ifPage(params){
console.log(params.uid)
if(params.uid){
return(<Detail uid={params.uid}/>)
}else {
return <List/>
}
}
toUrl(){
setTimeout(()=>{
},3000)
}
componentDidMount(){
this.toUrl()
}
render(){
console.log(this.props);
let {match} = this.props;
return(
<React.Fragment>
<h3>web2008</h3>
<header>组件</header>
<div className="main clearfix">
<div className="k_left">组件</div>
<div className="k_right">
{this.ifPage(match.params)}
</div>
</div>
<footer>组件</footer>
</React.Fragment>
)
}
}
export default View;
react/first-react/src/views/Web2008a/List.jsx
import React, { Component } from 'react';
class View extends Component {
render(){
return(
<div>
列表页面
</div>
)
}
}
export default View;
react/first-react/src/views/Web2008a/Detail.jsx
import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';
class View extends Component {
toUrl(){
console.log(this.props)
setTimeout(()=>{
this.props.history.push('/')
},3000)
}
componentDidMount(){
this.toUrl()
}
render(){
return(
<div>
详情页面
{this.props.uid}
</div>
)
}
}
export default withRouter(View);
react/first-react/src/views/Web/index.jsx
import React, { Component } from 'react';
import W1908 from './W1908/';
class View extends Component {
ifPage(params){
switch (params.cls) {
case '2008':
return <W1908/>
case '1908':
return <div>2008</div>
case '2010':
return <div>2010</div>
case '2020':
case '2020':
return <div>2020</div>
default:
return <div>工作室</div>
}
}
render(){
let { match } = this.props;
return(
<div>
web 架构
{this.ifPage(match.params)}
</div>
)
}
}
export default View;
react/first-react/src/views/Web/W1908/index.jsx
import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';
import List from './List.jsx';
import Detail from './Detail.jsx';
class View extends Component {
ifPage(params){
console.log(params.uid)
if(params.uid){
return(<Detail uid={params.uid}/>)
}else {
return <List/>
}
}
toUrl(){
setTimeout(()=>{
},3000)
}
componentDidMount(){
this.toUrl()
}
render(){
console.log(this.props);
let {match} = this.props;
return(
<React.Fragment>
<h3>web2008</h3>
<header>组件</header>
<div className="main clearfix">
<div className="k_left">组件</div>
<div className="k_right">
{this.ifPage(match.params)}
</div>
</div>
<footer>组件</footer>
</React.Fragment>
)
}
}
export default withRouter(View);
react/first-react/src/views/Web/W1908/List.jsx
import React, { Component } from 'react';
class View extends Component {
render(){
return(
<div>
列表页面
</div>
)
}
}
export default View;
react/first-react/src/views/Web/W1908/Detail.jsx
import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';
class View extends Component {
toUrl(){
console.log(this.props)
setTimeout(()=>{
},3000)
}
componentDidMount(){
this.toUrl()
}
render(){
return(
<div>
详情页面
{this.props.uid}
</div>
)
}
}
export default withRouter(View);