我们已经使用 create-react-app 搭建了自己的react项目,并且知道了基本语法,我们会发现这些在我们实际开发中是不够的,我们不可能把一个项目所有页面全部通过显示隐藏的处理方式去做,react为我们开发提供了路由处理,如果你用过angular-router或者angular-ui-router或者vue-router,这个你就不会陌生。
路由是实现是什么呢?很简单就是根据地址的变化就显示不同的页面!
1.安装react-router
在我们的my-app下执行命令,安装这个模块:
npm install react-router
npm install react-router-dom
等待完成!使用的版本,因为版本不同,使用也会有所区别:
2.初始化的路由配置
官方文档:https://reacttraining.com/react-router/web/guides/quick-start
我们在顶部引入路由模块,在render使用:
import React from 'react'; import ReactDOM from 'react-dom'; import { browserRouter as Router,Route,Link } from 'react-router-dom'; import './index.css'; import registerServiceWorker from './registerServiceWorker'; //设置组件 class App extends React.Component { render() { return <div>我是首页</div> } } ReactDOM.render( <Router> <div> <ul> <li><Link to="/">App</Link></li> </ul> <hr/> <Route exact path="/" component={App}/> </div> </Router>,document.getElementById('root') ); registerServiceWorker();
效果:
使用非常简单,还是jsx的写法,不过要包裹在Router的组件上,我们分析效果可知道:
<Link to="/">App</Link>解析为a标签
<Route exact path="/" component={App}/>会被设置的组件替换
3.做一个简单的官网demo
一般的官网包含:
新闻
关于我们
我们作为举例:
写好这三个组件,配置路由:
import React from 'react'; import ReactDOM from 'react-dom'; import { browserRouter as Router,Link } from 'react-router-dom'; import './index.css'; import registerServiceWorker from './registerServiceWorker'; //设置组件 class Home extends React.Component { render() { return <div>我是首页</div> } } //设置组件 class News extends React.Component { render() { return <div>新闻页面</div> } } //设置组件 class About extends React.Component { render() { return <div>关于我们</div> } } ReactDOM.render( <Router> <div> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/News">News</Link></li> <li><Link to="/About">About</Link></li> </ul> <hr/> <Route exact path="/" component={Home}/> <Route exact path="/News" component={News}/> <Route exact path="/About" component={About}/> </div> </Router>,document.getElementById('root') ); registerServiceWorker();
4.模块化我们的组件
还是用我们的官网作为例子,我们提炼修改:
index.js:
我们会把render的代码封装到app.js
import React from 'react'; import ReactDOM from 'react-dom'; import { browserRouter as Router,} from 'react-router-dom'; import registerServiceWorker from './registerServiceWorker'; //组件 主要框架结构 import App from './App.js'; ReactDOM.render( <Router> <App /> </Router>,document.getElementById('root') ); registerServiceWorker();
app.js
import React,{ Component } from 'react'; import { Route,Link } from 'react-router-dom'; //组件 各个组件 import Home from './page/Home.js'; import News from './page/News.js'; import About from './page/About.js'; class App extends Component { render() { return ( <div> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/News">News</Link></li> <li><Link to="/About">About</Link></li> </ul> <hr/> <Route exact path="/" component={Home}/> <Route exact path="/News" component={News}/> <Route exact path="/About" component={About}/> </div> ); } } export default App;
Home.js
各个页面:
import React,{ Component } from 'react'; class Home extends Component { render() { return <div>首页</div> } } export default Home;
News.js
import React,{ Component } from 'react'; class News extends Component { render() { return <div>新闻中心</div> } } export default News;
About.js
import React,{ Component } from 'react'; class About extends Component { render() { return <div>关于我们</div> } } export default About;
原文地址:https://www.jb51.cc/react/302687.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。