React Router 页面传值的四种方法


 
 
  • 1
注:本文示例React Router版本为:3.0.2,使用前请注意检查版本

一. props.params

官方例子使用 React router 定义路由时,我们可以给<Route>指定一个 path,然后指定通配符可以携带参数到指定的 path:
首先定义路由到 UserPage 页面:

  
  
  • 1
  • import { Router,Route,hashHistory} from 'react-router';
      
      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • class App extends React.Component { render() { return ( <Router history={hashHistory}> <Route path='/user/:name' component={UserPage}></Route> </Router> ) } }

    上面指定参数一个参数 name
    使用:

    import {Link,0); box-sizing: border-box;">'react-router';

    1.Link 组件实现跳转:

      
      
  • 1
  • <Link to="/user/sam">用户</Link>

    2.history 跳转:

      
      
  • 1
  • hashHistory.push("/user/sam");

    当页面跳转到 UserPage 页面之后,取出传过来的值:

      
      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • export default UserPage extends Component{ constructor(props){ super(props); } render(){ return(<div>this.props.params.name</div>) } }

    上面的方法可以传递一个或多个值,但是每个值的类型都是字符串,没法传递一个对象,如果传递的话可以将 json 对象转换为字符串,然后传递过去,传递过去之后再将 json 字符串转换为对象将数据取出来
    如:定义路由:

      
      
  • 1
  • <Route path='/user/:data' component={UserPage}></Route>

    使用:

      
      
  • 1
  • 2
  • 3
  • var data = {id:3,name:sam,age:36}; data = JSON.stringify(data); var path = `/user/${data}`;
      
      
  • 1
  • 1.Link to={path}>用户Link>
      
      
  • 1
  • 2.hashHistory.push(path);

    获取数据:

      
      
  • 1
  • 2
  • var data = JSON.parse(this.props.params.data); var {id,name,age} = data;

    通过这种方式跳转到 UserPage 页面时只能通过传递字符串来传递参数,那么是否有其他方法来优雅地直接传递对象而不仅仅是字符串呢?

    二. query

    query 方式使用很简单,类似于表单中的 get 方法,传递参数为明文:
    首先定义路由:

    '/user'  使用:

      
      
  • 1
  • 2
  • 3
  • 4
  • 5
  • var age:36}; var path = { pathname:'/user',query:data, }
     获取数据:

      
      
  • 1
  • 2
  • var data = this.props.location.query; var {id,age} = data;

    query 方式可以传递任意类型的值,但是页面的 URL 也是由 query 的值拼接的,URL 很长,那么有没有办法类似于表单 post 方式传递数据使得传递的数据不以明文传输呢?

    三. state

    state 方式类似于 post 方式,使用方式和 query 类似,
    首先定义路由:

     使用:

    Link>
      
      
  • 1
  • 获取数据:

    data = this.props.location.state;
    var {id,63); font-family:microsoft yahei; font-size:15px"> state 方式依然可以传递任意类型的数据,而且可以不以明文方式传输。

    四. onclick方法:

      // 向详情页传递要传递的值
      clickHandler(value) {
            browserHistory.push({
              pathname: '/detail/' + value,query: {
               billName: value.brandNm,billTittle: value.ticketNm,billImg: value.billPicPath,billId: value.billId
              },})
            console.log(value);
        }
      }


    接收参数:

        <p>billName:{this.props.location.query.billName}</p>
        <p>billTittle:{this.props.location.query.billTittle}</p>
        <p>billId:{this.props.location.query.billId}</p>
        <p>billImg:{this.props.location.query.billImg}</p>

    可以在实现后对比地址栏的 URL 来观察三种传值方式 URL 的区别

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

    相关推荐


    react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
    我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
    我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
    react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
    mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
    我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
    本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
    上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
    上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
    我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
    在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
    楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
    我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
    前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
    我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
    上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
    开源不易,感谢你的支持,❤ star me if you like concent ^_^
    hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
    本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
    ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom