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>
            )
        }
    }
    不停学习,热爱是源源不断的动力。
  • 相关阅读:
    ExtJs005继承
    ExtJs004define定义类
    ExtJS笔记
    解决vscode-pandoc插件生成pdf中文显示问题
    UDP学习笔记(.NET)
    WPF类库不能添加资源词典(xaml)的解决办法
    解决win10下获取操作系统版本为6.2.900(win8)的问题
    [转] Unit Test 访问Internal类型和方法
    VS2017使用小技巧(持续更新。。。)
    [转]Github遇到Permanently added the RSA host key for IP address '192.30.252.128' to the list of known host
  • 原文地址:https://www.cnblogs.com/ximenchuifa/p/14963336.html
Copyright © 2011-2022 走看看