转载请注明出处:王亟亟的大牛之路

继续本周的大方向,继续学习React,昨天把简单的hi all内容呈现出来后,今天研究如何多页面或者实现页面嵌套,

开始今天的内容前老规矩,先安利:https://github.com/ddwhan0123/Useful-Open-Source-Android


在传统的静态网页里,我们页面跳转通过超级链,页面重定向,转发等等姿势来解决多页面展示和逻辑跳转,而React对这部分做了很好的封装,也做成了 主件。

要是用也是国际惯例,npm下!!

npm install -S react-router

下完后直接import就可以使用,像这样

import { Router, Route, hashHistory } from 'react-router';

Router是大壳子,类似于路由容器的东西

Route是具体实施路由的对象

hashHistory表示路由切换的hash值,决定最终结果


因为直接的项目结构比较建的随意,所以把目录进行了重新整理,把main.js变成一个大容器,不做任何业务主件使用,像这样。

这一部分 react官方的例子写的很详细很棒,大家也可以看https://github.com/reactjs/react-router-tutorial,或者把他的demo跑一跑 豁然开朗。


上面提到了router其实和使用常规主件一样倒入,使用即可最基本的也就是以下这种形式

<Router><<Router>

我们先来写一个简单的页面

首先是昨天的ui搬家到了新的first.js

import React from 'react';
import styled from 'styled-components';
import { Router, Route, hashHistory } from 'react-router';

const Input = styled.input`
  font-size: 1.25em;
  padding: 0.5em;
  margin: 0.5em;
  color: palevioletred;
  background: papayawhip;
  border: none;
  border-radius: 3px;

  &:hover {
    box-shadow: inset 1px 1px 2px rgba(0,0,0,0.1);
  }
`;
const H1 = styled.h1`
  background-color: #a1a
`;

export default React.createClass({
  render() {
    return (
      <div>
          <Input placeholder="@mxstbr" type="text" />
          <H1>i am first h1</H1>
      </div>
    );
  }
})

然后在我们的main.js调用他

import React from 'react';
import { render } from 'react-dom';
import { Router , Route , hashHistory } from 'react-router';
import first from './first';

render((
  <Router history={hashHistory}>
    <Route path="/" component={first}/>
  </Router>
), document.getElementById('app'))

我们倒入了 first和react-router所用到的相关对象

Router容器下有一个Route节点会让我们的页面中多出first部分的内容

长这样

那我如果要路由到其他页面呢?

那我们来建一个页面来让他渲染

two.js

import React from 'react';
import styled from 'styled-components';

const H3= styled.h3`
  background-color: #a11
`;
export default React.createClass({
  render(){
    return (
      <H3>i am two h3</H3>
    );
  }
})

这是一个最基本的页面,就不解释了(建议手打,找找手感)

需要修改的知识main.js里的render部分

render((
  <Router history={hashHistory}>
    <Route path="/" component={first}></Route>
    <Route path="/two" component={two}/>
  </Router>
), document.getElementById('app'))

浏览器输入http://localhost:8080/#/two 看看效果吧

因为主件可以是单一控件,也可以是试图组,所以Router也是,它可以嵌套多个<route>

新建一个 three.js试试吧

import React from 'react';
import styled from 'styled-components';

const H2 = styled.h2`
  color: #eee
`;

export default React.createClass({
  render(){
    return(
      <H2>i am three H2</H2>
    )
  }
})

页面和two.js一样所以可以copy下。

我们强行让three嵌套入first

修改如下

render((
  <Router history={hashHistory}>
    <Route path="/" component={first}>
      <Route path="/three" component={three}/>
    </Route>
    <Route path="/two" component={two}/>
  </Router>
), document.getElementById('app'))

其实现在的内容就是

<first>
    <three></three>
</first>

输入http://localhost:8080/#/three看看吧

这一篇简单的介绍下这一套姿势如何简单的使用,其实react大多数功能都是如此,封装的简单易用,下一篇还会讲 路由相关

周末愉快!!!

试着用React写项目-利用react-router解决跳转路由等问题(一)的更多相关文章

  1. 试着用React写项目-利用react-router解决跳转路由等问题(三)

    转载请注明出处:王亟亟的大牛之路 本来想一下子把路由的接下来的内容都写完的,但是今天白天开了会,传了些代码打了个包,就被耽搁了 这一篇来讲一下 IndexLink和 onlyActiveOnIndex ...

  2. 试着用React写项目-利用styled-components解决样式问题

    转载请注明出处:王亟亟的大牛之路 啰嗦之前先安利,会渐渐丰富前端的知识点 https://github.com/ddwhan0123/Useful-Open-Source-Android 昨天用web ...

  3. 试着用React写项目-利用react-router解决跳转路由等问题(二)

    转载请注明出处:王亟亟的大牛之路 这一篇还是继续写react router相关的内容,废话之前先安利:https://github.com/ddwhan0123/Useful-Open-Source- ...

  4. 试着用React写项目-利用Webpack搭环境

    转载请注明出处:王亟亟的大牛之路 最近都蛋疼,然后前些天开了个会就是关于"不加班就得死"的死命令,作为抵制加班的先头兵,我感觉我时日无多是时候加快武装自己的速度不然吃土都不配了,就 ...

  5. React初步学习-利用React构建个人博客

    React初步学习-利用React构建个人博客 用React和Webpack写了一个很简单的个人博客,主要是想要熟悉一下react中各种基本基本属性及方法的使用.在构建过程中碰到不少问题,通过阅读官方 ...

  6. 【腾讯Bugly干货分享】React Native项目实战总结

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...

  7. React Native 项目运行在 Web 浏览器上面

    React Native 的出现,让前端工程师拥有了使用 JavaScript 编写原生 APP 的能力.相比之前的 Web app 来说,对于性能和用户体验提升了非常多. 但是 React Nati ...

  8. [转] 三步将你的 React Native 项目运行在 Web 浏览器上面

    React Native 的出现,让前端工程师拥有了使用 JavaScript 编写原生 APP 的能力.相比之前的 Web app 来说,对于性能和用户体验提升了非常多. 但是 React Nati ...

  9. React Native 项目整合 CodePush 全然指南

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/y4x5M0nivSrJaY3X92c/article/details/81976844 作者 | 钱 ...

随机推荐

  1. 网络虚拟化技术(一): Linux网络虚拟化

    创建虚拟网络环境 使用命令 $ ip netns add net0 可以创建一个完全隔离的新网络环境,这个环境包括一个独立的网卡空间,路由表,ARP表,ip地址表,iptables,ebtables, ...

  2. Linux下TCP延迟确认(Delayed Ack)机制导致的时延问题分析

    版权声明:本文由潘安群原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/105 来源:腾云阁 https://www.qclo ...

  3. kubernetes创建yaml,pod服务一直处于 ContainerCreating状态的原因查找与解决

    最近刚刚入手研究kubernetes,运行容器的时候,发现一直处于ContainerCreating状态,悲了个催,刚入手就遇到了点麻烦,下面来讲讲如何查找问题及解决的 运行容器命令: kubectl ...

  4. 4.querystring属性

    1.querystring.stringify(obj[, sep[, eq[, options]]]) 序列化, 第二个参数分隔符, 第三个参数是对象分隔符 querystring.stringif ...

  5. 企业服务的3种模式:On-Premise、SaaS、Mixed,该选哪种?--创业邦

    B轮融资二三事 我们从9月份开始启动B轮融资,与这些颇具洞察力的投资人聊天,是非常有挑战的事.他们的很多观点充满智慧,能帮你突破思考局限,受益良多.当然,整个过程虽然有趣但也不轻松,毕竟你的目的是完成 ...

  6. 【BZOJ2502】清理雪道 有上下界的网络流 最小流

    [BZOJ2502]清理雪道 Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降 ...

  7. 【BZOJ3156】防御准备 斜率优化

    [BZOJ3156]防御准备 Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小 ...

  8. thinkphp发起网络请求

    常规做法使用CURL方法: private function http_request($url,$data = null,$headers=array()){ $curl = curl_init() ...

  9. Java 中编程的格式

    Java 编程注意的格式: 1.大括号对齐 2.遇到{ 缩进Tab 3.程序块之间加空行 4.并排之间加空格 5.运算符之间加空格 6.{ 之间加空格 7.成对编程 ({ }) 8.类名首字母大写 9 ...

  10. docker环境搭建centos+jdk+tomcat_CENTOS篇

    前言 (1)写在前面的话,鉴于在linux或类unix系统中安装jdk+tomcat等环境,没有什么经验,所以选择在docker容器中安装之,以防止安装失败无法恢复系统 (2)需要下载对应的系统的do ...