zoukankan      html  css  js  c++  java
  • React-Router

    友情提示:本文暂时主要涉及 React Router < 4.0 版本。

    React Router 是一个基于 React 强大路由库,支持向应用中快速地添加视图和数据流,同时保持页面与 URL 间的同步。

    路由配置

    React Router 是建立在 history 之上的,提供 3 种 history 形式

    • browserHistory
    • hashHistory
    • createMemoryHistory

    一个 history 知道如何去监听浏览器地址栏的变化,并解析URL转化为location对象,然后Router使用它匹配到路由,最后正确地渲染对应的组件,同时路由会在渲染时将以下属性注入组件中:

    • history:Router的history对象,eg.: this.props.history.pushState(state, path, query)
    • location:当前的的loaction信息
    • params:URL的动态字段
    • route:渲染组件的路由
    • routeParams:路由的动态字段
    • children:指向该路由下的子路由,匹配到的子route的元素将被渲染

    提供一个示例,仅供参考

    /// 如果 route 的路径是 users/:userId,URL 是 /users/123/portfolios/345
    this.props.routeParams 是 {userId: '123'}
    this.props.params 是 {userId: '123', portfolioId: 345}
    

    history对象同时提供API方法

    • pushState(state, pathname, query) 
    • replaceState(state, pathname, query)
    • createPath(pathname, query)

    在组件中获取history对象的方法

    • this.props.history层层传递
    • 使用this.context.history访问

    有关history兴起的历程,参见:React Router中的History

    常用组件

    Link

    用于正常的用户点击跳转,对于表单跳转、点击按钮跳转等操作。

    提供两种方法与React Router对接:

    • browserHistory.push
    import { browserHistory } from 'react-router'
    class MyComp extends React.Component({
      // ...
      handleSubmit(event) {
        event.preventDefault()
        // ... event.target.elements[0].value
        const path = `/repos/${xxx1}/${xxx2}`
        browserHistory.push(path)
      }
    })
    
    // 注意,该方法需额外声明
    MyComp.contextTypes = {
      router: React.PropTypes.object
    };
    • this.context.router.push
    class MyComp extends React.Component({
      // ask for `router` from context
      static contextTypes = {
        router: React.PropTypes.object
      }
    
      handleSubmit(event) {
        // ...
        this.context.router.push(path)
      },
    })
    

    以上均是在组件内部导航,若想在组件外导航页面,只能使用browserHistory对象

    // your main file that renders a Router
    import { Router, browserHistory } from 'react-router'
    import routes from './app/routes'
    render(<Router history={browserHistory} routes={routes}/>, node)
    
    // somewhere like a redux/flux action file:
    import { browserHistory } from 'react-router'
    browserHistory.push('/some/path')

    其他组件的相关信息,可参见:Router API 文档;  

    注意事项

    • 版本

    React Router 4 较之前的版本有较大改动,务必注意。

    在React-Router-4之前版本,若采用路由

    <Router history={browserHistory} />

    如果开发服务器使用的是 webpack-dev-server,需加上--history-api-fallback参数

    $ webpack-dev-server --inline --content-base . --history-api-fallback

    避免刷新时报错。

    参考

    React-Router 中文简明教程官方示例教程 - react-router-tutorial

    Introduction | React Router 中文文档

    React Router 使用教程-阮一峰

  • 相关阅读:
    不务正业系列-浅谈《过气堡垒》,一个RTS玩家的视角
    [LeetCode] 54. Spiral Matrix
    [LeetCode] 40. Combination Sum II
    138. Copy List with Random Pointer
    310. Minimum Height Trees
    4. Median of Two Sorted Arrays
    153. Find Minimum in Rotated Sorted Array
    33. Search in Rotated Sorted Array
    35. Search Insert Position
    278. First Bad Version
  • 原文地址:https://www.cnblogs.com/wjcx-sqh/p/9308642.html
Copyright © 2011-2022 走看看