React路由传参

4.React路由传参

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}>
                                    {/*向路由组件传递params参数*/}
                                    {/*<Link to={`/home/message/detail/${msgObj.id}/${msgObj.title}`}>{msgObj.title}</Link>  */}

                                    {/*向路由组件传递search参数*/}
                                    {/*<Link to={`/home/message/detail?id=${msgObj.id}&title=${msgObj.title}`}>{msgObj.title}</Link>*/}

                                    {/*向路由组件传递state参数*/}
                                    {/* 路由模式改成replace替换 , 默认为push堆栈 */}
                                    <Link replace to={{pathname: '/home/message/detail', state:{id:msgObj.id, title: msgObj.title}}}>{msgObj.title}</Link>
                                </li>
                            )
                        })

                    }
                </ul>
                <hr/>
                {/*声明接收params参数*/}
                {/*<Route path='/home/message/detail/:id/:title' component={Detail}/>*/}

                {/*search参数无需声明接收, 正常注册路由即可*/}
                {/*<Route path='/home/message/detail' component={Detail}/>*/}
                
                {/*state参数无需声明接收, 正常注册路由即可*/}
                <Route path='/home/message/detail' component={Detail}/>
            </div>
        );                                                          
    }
}

接收参数:

import React, {Component} from 'react';
// import qs from "querystring";


const detailData = [
    {id:'01', title:'abc', content: '北京'},
    {id:'02', title:'def', content: '上海'},
    {id:'03', title:'ghi', content: '广州'},
    ]

class Detail extends Component {
    render() {
        console.log(this.props)
        // 接收params参数
        // const {id, title} = this.props.match.params

        // 接收search参数
        // const {search} = this.props.location
        // const {id, title} = qs.parse(search.slice(1))

        // 接收state参数
        const {id, title} = 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>
        );
    }
}

export default Detail;
posted @ 2021-09-03 16:41  tomjoy  阅读(215)  评论(0编辑  收藏  举报