在上一篇总结了react中路由的基本用法,实现了基本的页面跳转,但这肯定是不够用的,比如说在新闻列表页面,点击某一条新闻,希望页面能跳转到新闻详情页,又该如何实现呢?

首先继续上一篇的项目,添加一个新闻详情页面组件content.js

然后在根组件App.js中配置路由:

最后,修改新闻列表组件News.js

  

当我们点击新闻列表页面的新闻时,页面就会跳转到详情页,但是在实际的运行中,当点击不同的新闻标题时,需要根据新闻id或者其他标识符在详情页请求加载不同的新闻详情,在新闻列表页面,我们可以根据点击事件,知道我们当前添加的这条新闻的id,但是在详情页并不知道,所以需要在进行页面跳转的时候,将当前新闻的id作为参数进行传递,下面就总结如何在react中进行页面间参数传递,主要包括动态路由和get传参两种方式。

动态路由

所谓动态路由,就是将参数放置在路由中,然后在详情页面,根据路由后面带的不同参数,加载不同的新闻详情,主要分为三步操作。

1,在根组件页面配置动态路由

2,在路由跳转页面动态传参

此时,当我们再去点击新闻列表页面的新闻,进行页面跳转的时候,就会在地址栏中看到刚刚点击的新闻的id

3,获取地址栏中传递过来的参数

在需要获取参数的详情页面,使用生命周期函数,获取props对象中的值就可以了,这是获取路由传参的固定写法,最后一个aid取决于在根组件配置路由时的命名。

下面贴出主要代码:

app.js

  1. import React, { Component } from 'react';
  2. import './assets/css/App.css';
  3. import { BrowserRouter as Router, Route, Link } from "react-router-dom";
  4. import Home from './components/Home';
  5. import News from './components/News';
  6. import Content from './components/Content';
  7.  
  8. class App extends Component {
  9. render() {
  10. return (
  11. <div className="App">
  12. <Router>
  13. <div>
  14. <header className="title">
  15. <Link to="/">首页</Link>
  16. <Link to="/news">新闻</Link>
  17. </header>
  18. <Route exact path="/" component={Home} />
  19. <Route path="/news" component={News} />
  20. <Route path="/content/:aid" component={Content} />
  21. </div>
  22. </Router>
  23. </div>
  24. );
  25. }
  26. }
  27.  
  28. export default App;

News.js

  1. import React, { Component } from 'react';
  2. import { Link } from "react-router-dom";
  3.  
  4. class News extends Component {
  5. constructor(props) {
  6. super(props);
  7. this.state = {
  8. list:[
  9. {aid:'11',title:'我是新闻1111'},
  10. {aid:'222',title:'我是新闻222'},
  11. {aid:'3',title:'我是新闻333'},
  12. { aid:'4',title:'我是新闻4444'}
  13. ]
  14. };
  15. }
  16. render() {
  17. return (
  18. <div>
  19. 我是新闻组件
  20. <ul>
  21. {
  22. this.state.list.map((value,key)=>{
  23. return (
  24. <li key={key}>
  25. <Link to={`/content/${value.aid}`}>{value.title}</Link>
  26. </li>
  27. )
  28. })
  29. }
  30. </ul>
  31. </div>
  32. );
  33. }
  34. }
  35.  
  36. export default News;

Content.js

  1. import React, { Component } from 'react';
  2.  
  3. class Content extends Component {
  4. constructor(props) {
  5. super(props);
  6. this.state = { };
  7. }
  8. componentDidMount(){
  9. console.log(this.props.match.params.aid);
  10.  
  11. }
  12. render() {
  13. return (
  14. <div>
  15. 我是详情页面
  16. </div>
  17. );
  18. }
  19. }
  20.  
  21. export default Content;

get传参

使用get传参的时候,不要配置动态路由,只需要在进行页面跳转的时候将需要传递的参数接在路由后面就可以了。

app.js

News.js

此时,当我们点击新闻列表跳转到详情页面时,地址栏中就已经可以看到传递过来的参数了

我们在新闻详情页面获取地址栏中的参数。

Content.js

此时肯定时不能直接使用了,我们可以通过js来处理获取到的值,变成我们需要的格式,也可以借助第三方工具来处理,在使用第三方工具的时候,主要分为以下几步:

1,首先在项目根目录进行安装:npm install url

2,在需要使用的组件里面引入工具:import url from 'url';

3,在生命周期函数中使用:

下面贴出相关页面代码:

News.js

  1. import React, { Component } from 'react';
  2. import { Link } from "react-router-dom";
  3.  
  4. class News extends Component {
  5. constructor(props) {
  6. super(props);
  7. this.state = {
  8. list:[
  9. {aid:'11',title:'我是新闻1111'},
  10. {aid:'222',title:'我是新闻222'},
  11. {aid:'3',title:'我是新闻333'},
  12. { aid:'4',title:'我是新闻4444'}
  13. ]
  14. };
  15. }
  16. render() {
  17. return (
  18. <div>
  19. 我是新闻组件
  20. <ul>
  21. {
  22. this.state.list.map((value,key)=>{
  23. return (
  24. <li key={key}>
  25. <Link to={`/content?aid=${value.aid}`}>{value.title}</Link>
  26. </li>
  27. )
  28. })
  29. }
  30. </ul>
  31. </div>
  32. );
  33. }
  34. }
  35.  
  36. export default News;

Content.js

  1. import React, { Component } from 'react';
  2. import url from 'url';
  3.  
  4. class Content extends Component {
  5. constructor(props) {
  6. super(props);
  7. this.state = { };
  8. }
  9. componentDidMount(){
  10. var query=url.parse(this.props.location.search,true).query;
  11. console.log(query)
  12. console.log(query.aid)
  13. }
  14. render() {
  15. return (
  16. <div>
  17. 我是详情页面
  18. </div>
  19. );
  20. }
  21. }
  22.  
  23. export default Content;

代码下载:点这里

react路由传值的更多相关文章

  1. react之传递数据的几种方式props传值、路由传值、状态提升、redux、context

    react之传递数据的几种方式 1.父子传值 父传值:<子的标签 value={'aaa'} index={'bbb'}></子的标签> 子接值:<li key={thi ...

  2. 十四、 React路由(react-router4.x): 动态路由、get传值、React中使用url模块

    概述 新闻列表 -跳转-> 详情页 时,想把列表对应的id传到详情页里,可用到三种传值方法: 1.动态路由传值 2.get传值 3.localstorage传值 一.动态路由传值 [App.js ...

  3. react路由的安装及格式和使用方法

    react路由的安装: 在要创建项目的目录命令窗里输入: cnpm install -g create-react-app create-react-app  项目名 在创建好的项目目录命令窗里输入: ...

  4. 我的一个React路由嵌套(多级路由),路由传参之旅

    在上一篇react路由之旅中,我们简单地配置了react,进行了react路由及相关知识的学习,引入以及实现一个局部跳转的功能,接下来就是深入学习路由的嵌套以及传参,这是工作中主要用要的. 我的rea ...

  5. ionic路由传值

    ionic路由传值 app.js ===================================== //新建工作任务.state(‘app.newTask’, angularAMD.rout ...

  6. Vue 动态路由传值

    一.动态路由传值 1.配置动态路由: const routes = [ //动态路由路径参数以:开头 { path: '/Content/:aid', component:Content}, ] 2. ...

  7. react router @4 和 vue路由 详解(七)react路由守卫

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 12.react路由守卫? a.在之前的版本中,React Router 也提供了类似的 ...

  8. react路由嵌套

    所谓的嵌套路由就是在某些以及路由下面存在二级路由,这些二级路由除了公用一级路由导航模块外,还公用当前的二级路由的导航模块,也就是部分进行了切换,要实现嵌套路由,首先回顾之前的内容,实现基本的react ...

  9. react路由配置(未完)

    React路由 React推了两个版本 一个是react-router 一个是react-router-dom 个人建议使用第二个 因为他多了一个Link组件 Npm install react-ro ...

随机推荐

  1. 实验吧—安全杂项——WP之 flag.xls

    点击链接下载文件,是一个xls文件 打开: 需要密码的 下一步,我将后缀名改为TXT,然后搜素关键词“flag”,一个一个查找就可以发现啦~!!!(这是最简单的一种方法)

  2. 《DSP using MATLAB》Problem 6.7

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  3. day 06云计算的三种服务模式:IaaS,PaaS和SaaS

    云计算的三种服务模式:IaaS,PaaS和SaaS ”云服务”现在已经快成了一个家喻户晓的词了.如果你不知道PaaS, IaaS 和SaaS的区别,那么也没啥,因为很多人确实不知道. “云”其实是互联 ...

  4. zabbix自定义触发器进行监控

    给某一主机创建触发器 触发器属性,其中centos是主机名,也就是你监控的那台主机的名字,可以点击bp2,查看该主机的hostname 检测该触发器 在该主机下可以看到刚创建的触发器 最后我们给该主机 ...

  5. IP、端口号、MAC

    1.端口 端口是TCP/IP协议簇中,应用层进程与传输层协议实体间的通信接口.端口是操作系统可分配的一种资源:应用程序通过系统调用与某端口绑定后,传输层传给改端口的数据都被相应进程接收,相应进程发给传 ...

  6. 10 Rules of Highly Successful Project Management

    I commited the information below to report PDU of PMI. ^_^. In this paper, the author introduces his ...

  7. AspNetCore+Swagger 生成Model描述

    AspNetCore+Swagger 生成Model 描述 前言: 本篇文章实现是基于上一篇文章,进下补充:多余的就不多说了,只是为了实现Model的描述生成:有兴趣的可以结合上一篇的进行实现:如有更 ...

  8. super and this

    super 指向父类的一个指针, 引用父类中的属性,方法或者构造函数 public class Father { String name ; Father(String myName){ name = ...

  9. NET设计模式 第二部分 结构性模式(8):桥接模式(Bridge Pattern)

    桥接模式(Bridge Pattern) ——.NET设计模式系列之九 Terrylee,2006年2月 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维 ...

  10. Hanlp自然语言处理工具的使用演练

    Hanlp是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用.Hanlp具备功能完善.性能高效.架构清洗.语料时新.可自定义的特点:提供词法分析(中文分词.磁性标注.命名实体识 ...