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 使用教程-阮一峰

  • 相关阅读:
    Redis 的set集合使用及set集合和list列表的区别和应用场景
    c++ JsonCpp Parse对Json字符串解析转换判断的补充 Json格式验证
    使用程序将文件夹名字输出到文本文件中
    MVC 使用PageList进行分页
    sql从某不连续的数字中将其分段并找出缺失的数字并分段
    手机跟本机调试
    javascript中常用的一些功能及正则表达式的用法
    配置tomcat免安装版服务器
    xheditor上传图片的java实现
    eclipse 使用技巧
  • 原文地址:https://www.cnblogs.com/wjcx-sqh/p/9308642.html
Copyright © 2011-2022 走看看