• 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>
            )
        }
    }
    不停学习,热爱是源源不断的动力。
  • 相关阅读:
    asp.net笔记第一章
    数据库复习笔记
    tp5博客项目实战2
    springboot调整MybatisPlus全局的验证策略
    SpringBoot整合MybatisPlus,并实现新增、修改、删除、查看、分页
    springboot整合Apollo
    创建apollo项目,并发布配置
    Apollo部门管理
    搭建Apollo环境(Ubuntu-18.04.4)
    启动apollo时出现的问题,../demo.sh: 行 84: curl: 未找到命令
  • 原文地址:https://www.cnblogs.com/ximenchuifa/p/14963336.html
Copyright © 2020-2023  润新知