zoukankan      html  css  js  c++  java
  • react中路由跳转传参push replace

    传递参数的跳转页面

    import React, { Component } from 'react'
    import {Route} from 'react-router-dom'
    import Detail from './Detail'
    
    export default class Message extends Component {
    
        state = {
            messageArr: [
                {id:'01',title:'消息1'},
                {id:'02',title:'消息2'},
                {id:'03',title:'消息3'}
            ]
        } 
    
        go = (data)=>{
            // this.props.history.push('/home/message/detail',data) // push压栈可以后退前进
            this.props.history.replace('/home/message/detail',data)  //replace传值是替换,不可前进后退
        }
        render() {
            const {messageArr} = this.state
            return (
                <div>
                    <ul>
                       {
                           messageArr.map((msgObj)=>{
                             return(
                                 <li key={msgObj.id} onClick={()=>this.go({id:msgObj.id,title:msgObj.title})}>
                                    {msgObj.title}
                                 </li>
                                )
                           })
                       }
                    </ul>
                    <hr/>
                    <Route path="/home/message/detail" component={Detail} />
                </div>
            )
        }
    }

    跳转的目标页面

    import React, { Component } from 'react'
    const DetailData = [
        {id:'01',content:'你好,中国'},
        {id:'02',content:'你好,世界'},
        {id:'03',content:'你好,未来的自己'}
    ]
    
    export default class index extends Component {
        render() {
            const {id,title} = this.props.location.state || {}
            //this.props.location.state 就是传递的参数对象
            const findResult = DetailData.find((detailObj)=>{
                return detailObj.id ===id
            }) || {}
            return (
                <ul>
                    <li>ID:{id}</li>
                    <li>TITLE:{title}</li>
                    <li>CONTENT:{findResult.content}</li>
                </ul>
            )
        }
    }

    还可以利用<Link></Link>标签中的replace属性将路由跳转模式改变成replace模式,默认的路由跳转模式就是push

    import React, { Component } from 'react'
    import {Link,Route} from 'react-router-dom'
    import Detail from './Detail'
    
    export default class Message extends Component {
    
        state = {
            messageArr: [
                {id:'01',title:'消息1'},
                {id:'02',title:'消息2'},
                {id:'03',title:'消息3'}
            ]
        } 
    
        render() {
            const {messageArr} = this.state
            return (
                <div>
                    <ul>
                       {
                           messageArr.map((msgObj)=>{
                             return(
                                 <li key={msgObj.id}>
                                     {/**向路由组件传递state参数*/}
                                     <Link to={{pathname:'/home/message/detail',state:{id:msgObj.id,title:msgObj.title}}}>{msgObj.title}</Link>
                                 </li>
                                )
                           })
                       }
                    </ul>
                    <hr/>
                    {/** search参数无需声明接收 ,正常注册声明*/}
                    <Route path="/home/message/detail" component={Detail} />
                </div>
            )
        }
    }
    不停学习,热爱是源源不断的动力。
  • 相关阅读:
    《Java 学习笔记》 第三章阅读体验
    《Java 学习笔记》 第四章阅读体验
    Android 自定义控件的几个步骤
    新的Android应用 记账理财助手 登陆国内各大市场啦。
    第一个 Android 应用发布到 Google Market 中了
    DoWhat 登录 AppChina应用汇啦
    开始阅读《Java 学习笔记》一书
    Android 开发的多分辨率自适应图片要点
    五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
    在oracle中建立自动编号sql
  • 原文地址:https://www.cnblogs.com/ximenchuifa/p/14963336.html
Copyright © 2011-2022 走看看