详细代码栗子:https://github.com/wayaha/react-dom-CY(如果对您有帮助,请你帮我点颗star)

clone然后

npm install
npm start

分割线


1、这个项目使用create-react-app搭建;

  首先需要安装好create-react-app

npm install -g create-react-app

  安装完毕之后就是搭建项目;

create-react-app your-project-name
cd your-project-name
npm start

  安装完成之后,会自动打开localhost:3000;打开create-react-app自带的一个简单dom。

  **  另外,create-react-app默认配置样式使用的.css文件,习惯使用.scss的大佬可以在config文件下的 webpack.config.dev.js 和 webpack.config.prod.js 中rules数组中添加下面配置即可;

{
test:/\.scss$/,
loaders:['style-loader', 'css-loader', 'sass-loader']
}

2、关于相关安装包的下载

  React Router被拆分成三个包:react-router,react-router-domreact-router-nativereact-router提供核心的路由组件与函数。其余两个则提供运行环境(即浏览器与react-native)所需的特定组件。

  进行网站(将会运行在浏览器环境中)构建,我们应当安装react-router-domreact-router-dom暴露出react-router中暴露的对象与方法,因此你只需要安装并引用react-router-dom即可。

npm install --save react-router-dom

3、开始项目代码

  代码结构如下:

 

  (1)、路由类型的选择

    在你开始项目前,你需要决定你使用的路由的类型。对于网页项目,存在<BrowserRouter><HashRouter>两种组件。当存在服务区来管理动态请求时,需要使用<BrowserRouter>组件,而<HashRouter>被用于静态网站。

    通常,我们更倾向选择<BrowserRouter>,但如果你的网站仅用来呈现静态文件,那么<HashRouter>将会是一个好选择。

    从效果上来看,<BrowserRouter><HashRouter>在url中少了一个#,需要注意的是,没有#的路由切换前后对服务端来说是不同的url,。在我们的Dome中可以试一下,代码在index.js如下:

import React from 'react';
import ReactDOM from 'react-dom';
import { createStore } from 'redux';
import {
// BrowserRouter,
HashRouter
} from 'react-router-dom';
import { Provider } from 'react-redux';
import reducer from './redux';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker'; const store = createStore(reducer); ReactDOM.render(
<Provider store={store}>
{/* <BrowserRouter> */}
<HashRouter>
<App />
</HashRouter>
{/* </BrowserRouter> */}
</Provider>,
document.getElementById('root')
);
registerServiceWorker();

  (2)、一级路由就是Route文件下的index.js文件所示;

    代码如下:

import React, { Component } from 'react';
import { Switch, Route, Redirect, NavLink } from 'react-router-dom';
import Home from '../components/Home';
import Company from '../components/Company';
import Park from '../components/Park';
import './index.scss'; class Main extends Component {
// constructor (props) {
// super(props);
// };
componentDidMount () {
console.log('this is Main...');
}; render () {
return (
<main className={'mainSec'}>
<nav>
<NavLink
              className="resetNavLink"
              activeClassName='navActive'
              to='/home'>
                {'Home'}
            </NavLink>
            &nbsp; 
<NavLink
              className="resetNavLink"
              activeClassName='navActive'
              to='/company'>
                {'Company'}
            </NavLink>
            &nbsp; 
<NavLink
              className="resetNavLink"
              activeClassName='navActive'
              to='/park'>
                {'park'}
            </NavLink>
</nav>
<Switch>
<Route exact path='/home' component={Home} />
<Route path='/company' component={Company} />
<Route exact path='/park' component={Park} />
<Redirect to='/home' />
</Switch>
</main>
)
}
}; export default Main;

    a、锚点的选择和使用

      现在,我们应用需要在各个页面间切换。如果使用锚点元素实现,在每次点击时页面将被重新加载。React Router提供了<Link>和<NavLink>组件用来避免这种状况的发生。当你点击<Link>时,URL会更新,组件会被重新渲染,但是页面不会重新加载。实际上锚点元素就是一个a标签,to属性就相当于href属性;

      <Link>使用'to'参数来描述需要定位的页面。它的值也可以是location对象(包含pathname,search,hash与state属性)。如果其值为字符串将会被转换为location对象。

      <NavLink>可以增加 activeClassName 或者 activeStyle 属性,设置当前路由被选中的样式;

         -- exact:  当为true时,仅当位置匹配完全时才会应用活动类/样式。

    b、Route

      path: string; 一个有效的URL路径。

      exact: bool  当为true时,仅当路径与location.pathname完全匹配时才匹配。如果该路由有子路由,不能设置为true。

      strict: bool  当为true时,具有尾部斜杠的路径将仅与具有尾部斜杠的location.pathname匹配。当在location.pathname中有其他URL段时,这不起作用。strict可以用来强制执行location.pathname没有尾部斜杠,但为了做到这一点,strict和exact必须是true。

      另外,还有component、render 和 children属性,这三个属性优先级依次降低,不可以在一个Route组件上使用这三个属性中的多个。一般选择用component属性。

    c、Redirect 重定向

      to: string/Object   要重定向到的网址。

      push: bool 当为true时,重定向会将新条目推入历史记录,而不是替换当前条目。

      from: string  要重定向的路径名。这只能用于在<Switch>内部呈现<Redirect>时匹配位置;

    d、Switch 它的独特之处是独它仅仅渲染一个路由;

  (3)、路由的嵌套

    路由嵌套在Companey组件中;代码如下;

import React, { Component } from 'react';
import { Switch, Route, NavLink, Redirect } from 'react-router-dom';
import FontEnd from './FontEnd';
import BackEnd from './BackEnd';
import Test from './Test';
import Manage from './Manage'; class Company extends Component {
componentDidMount () {
console.log('this is Company...');
}; render () {
const { match } = this.props;
// console.log(match);
return (
<div>
<p>{'this is Company.....'}</p>
<nav>
<NavLink
              className="resetNavLink"
              activeClassName='navActive'
              to='/company/fontEnd'>
                {'FontEnd'}
            </NavLink>
            &nbsp; 
<NavLink
              className="resetNavLink"
              activeClassName='navActive'
              to='/company/backEnd'>
                {'BackEnd'}
            </NavLink>
            &nbsp; 
<NavLink
              className="resetNavLink"
              activeClassName='navActive'
              to='/company/test'>
                {'Test'}
            </NavLink>
            &nbsp; 
<NavLink
              className="resetNavLink"
              activeClassName='navActive'
              to='/company/manager'>
                {'Manager'}
            </NavLink>
</nav>
<Switch>
<Route exact path={`${match.path}/:department`} render={(localtions) => {
const { match: { params: {department} }} = localtions;
console.log(department);
const temp = {fontEnd: <FontEnd />, backEnd: <BackEnd />, test: <Test />, manager: <Manage />}
return temp[department];
}}
/>
<Redirect to='company/fontEnd/' />
</Switch>
</div>
);
};
}; export default Company;

    这个没有什么特别的,需要注意的就是,子路由Route的path和锚点的 to 都是需要一个完整的路由路径; 子路由路径中 ”:“ 后的属性是可传到子组件的参数,在子组件this.props.match.params中是可以拿到的。

关于react router 4 的小实践的更多相关文章

  1. React Router 4.x 开发,这些雷区我们都帮你踩过了

    前言 在前端框架层出不穷的今天,React 以其虚拟 DOM .组件化开发思想等特性迅速占据了主流位置,成为前端开发工程师热衷的 Javascript 库.作为 React 体系中的重要组成部分:Re ...

  2. react、react-router、redux 也许是最佳小实践1

    小前言 这是一个小小的有关react的小例子,希望通过一个小例子,可以让新手更好的了解到react.react-router4.0.redux的集中使用方法. 这是基于create-react-app ...

  3. React 实践记录 03 React router

    Introduction 本文主要参考了react router 的官方文档. React Router是一套完整的配合React的路由解决方案,可能你已经知道前端路由,或者知道后端有路由的概念,如下 ...

  4. React router动态加载组件-适配器模式的应用

    前言 本文讲述怎么实现动态加载组件,并借此阐述适配器模式. 一.普通路由例子 import Center from 'page/center'; import Data from 'page/data ...

  5. React Router教程

    React Router教程 React项目的可用的路由库是React-Router,当然这也是官方支持的.它也分为: react-router 核心组件 react-router-dom 应用于浏览 ...

  6. React Router学习

    React Router教程 本教程引用马伦老师的的教程 React项目的可用的路由库是React-Router,当然这也是官方支持的.它也分为: react-router 核心组件 react-ro ...

  7. [Web 前端] 你不知道的 React Router 4

    cp from https://segmentfault.com/a/1190000010718620 几个月前,React Router 4 发布,我能清晰地感觉到来自 Twitter 大家对新版本 ...

  8. React Router V4.0学习笔记

    最近在学习React Router,但是网站的教程多半还是3.X版本之前的,所以我只能在GitHub上找到React Router的官方文档在读.后来总结了一下,包括学习经验以及V3.X与V4.X的差 ...

  9. React Router 4.0 体验

    React Router 4.0 (以下简称 RR4) 已经正式发布,它遵循React的设计理念,即万物皆组件.所以 RR4 只是一堆 提供了导航功能的组件(还有若干对象和方法),具有声明式(声明式编 ...

随机推荐

  1. Tag功能介绍—我们为什么打Tag?

    想必CSDN的新老用户在访问CSDN网站的博客.社区.下载等服务时,经常能够看到"请您添加标签"的提示.也许很多人对此抱有疑问:加标签有什么用?在这里我们为您集中解答一下疑惑. T ...

  2. bootmgr解压缩

    主要参考以下两个文章: 1.  http://bbs.wuyou.com/forum.php?mod=viewthread&tid=211314 2.  http://reboot.pro/f ...

  3. 尚学堂马士兵struts2 课堂笔记(二)

    14通配符问题 其实这个问题看一个例子就ok <package name="actions" extends="struts-default" names ...

  4. Linux中的端口占用问题

    本文将会阐述两种解决端口占用的方法. 本文会用到的服务器端的程序如下: #include "unp.h" #include <time.h> int main(int ...

  5. (NO.00002)iOS游戏精灵战争雏形(六)

    接下来我们给MainScene场景再添加一个精灵,作为敌人. 双击SpriteBuilder中的MainScene.ccb,从控件库拖入一个CCSprite到CCPhysicsNode中,设置精灵帧为 ...

  6. Java应用程序使用系统托盘资源

    要想使自己开发的Java SE项目运行在自己的电脑系统托盘上,这并不是什么难事,总共需要如下几步即可: 1.线判断一下,系统托盘是否可用,否则接下来的程序将不可避免的报出异常咯 2.获得一个Syste ...

  7. mysql进阶(二十三)数据库事务四大特性

    数据库事务四大特性       原子性.一致性.分离性.持久性 原子性  事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行.这种特性称为 ...

  8. lvs与haproxy

    最近一直在看一些高可用性的负载均衡方案,当然那些f5之类的硬件设备是玩不起也接触不到了.只能看这些for free的开源方案. 目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实 ...

  9. Leetcode_121_Best Time to Buy and Sell Stock

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43024967 Say you have an array ...

  10. 类成员函数后边加const

    本文主要整理自stackoverflow上的一个对问题Meaning of “const” last in a C++ method declaration?的回答. 测试1 对于下边的程序,关键字c ...