React-router

react的路由

首先安装reacr-router npm install react-router --save,会自动安装上最新的版本4.1.1,但是新的react-router里面没有hashHistory,很烦,所有我自己是在webpack.json里面写上"react-router": "^2.8.1" 然后cnpm install 安装这个版本

创建页面

  • ./app/containers/app.jsx 所有页面的外壳
  • ./ap/containers/Home/index.jsx 主页
  • ./ap/containers/List/index.jsx 列表页
  • ./ap/containers/Detail/index.jsx 详情页
  • ./ap/containers/NotFound/index.jsx 404

App.jsx
app.jsx里面的代码是这样子的,但是在正式的项目开发中,这个文件很有用,而且这个文件和react-router也会结合的很好

exprot default class App extends React.Component{
    render(){
        return(

            <div>
            //<p>header</p>
            {this.props.children}
            //<p>footer</p>
            </div>
        )
    }
}
this.props.children表示组件的所有子节点

this.props.children的值有三种可能:当组件没有子节点,它是undefined;如果有一个子节点,数据类型是object;如果有多个子节点,数据类型就是array。所以处理this.props.children的时候要多注意

React提供了一个方法React.children来处理this.props.children。可以用react.children.map 来遍历子节点。

配置router
创建./app/router/routeMap.jsx 文件

import {Router,Route,IndexRoute} from "react-router"

export default class RouteMap extends React.Component{
    updataHandler(){
        console.log('每次router变化之后都会触发')
    }
      render(){
        return(
            <Router history={this.props.history} onUpdate={this.updataHandler.bind(this)}>
                <Route path="/" component={App}>
                    <IndexRoute component={Home}/>
                    <Route path="list" component={List}/>
                    <Route path="detail/:id" component={Detail}/>
                    <Route path="*" component={NotFound}/>
                </Route>   
            </Router>

        )
    }
}

使用router

./app/index.jsx 在这里写我们定义的RouterMap组件

import React from "react"
import {render} from "react-dom"
import {hashHistory} from "react-router"

import "./static/css/common.less"
//之前的性能检测
import Perf from "react-addons-perf"
window.Perf = Perf


import RouteMap from "./router/routeMap"

render(
    <RouteMap history={hashHistory}/>,
    document.getElementById('root')
)

这里的hashHistory(地址栏:localhost:8080/#/list)与之对应的还有一个browserHistory(地址栏:localhost:8080/list),但是这个需要服务器端的支持

页面跳转

1.从一个页面跳转到另一个页面,有两种方法,第一种是`<Link>` 跳转
import React from "react";
import {Link} from "react-router"

//PureRenderMixin性能优化  然后在组件中引用
import PureRenderMixin from "react-addons-pure-render-mixin"


export default class Home extends React.Component{
    //优化的代码
    constructor(props,context){
        super(props,context)
        this.shouldComponentUpdate = PureRenderMixin.shouldComponentUpdate.bind(this)
    }

    render(){
        return(
            <div>
             这是home页面 <br/>
             <Link to="/list">to list</Link>
            </div>
        )
    }
}
2.另外一种是使用js跳转
import React from "react"
import {hashHistory} from "react-router"

export default class List extends React.Component{
    render(){
          const arr = ["list页面1","list页面2","list页面3"]
        return(
          <ul>
            {arr.map((item,index)=>{
                return <li key={index}  onClick = {this.clickHandler.bind(this,index)}>{item}</li>
            })}
          </ul>
        )
    }
        //js的路由跳转
clickHandler(value){
    hashHistory.push("/detail/" + value)
}

}

获取参数
Detail页面需要获取url中的参数,可以用this.props.params.id来获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值