react-router的params/search/state传参方式(对比React-Router4/5/6)

一.react路由跳转和传参方式-React-Router4/5

1.params参数方式

(1)标签路由链接跳转方式:
Home组件的render配置prams携带参数方式
//路由链接
二级路由{item.title}
(2)编程式导航方式:
 this.props.history.replace(`/home/message/detail/${id}/${title}`)

//路由注册


params接收参数方式-detail组件中render
//detail页面接收参数方式 
 const {id,title} = this.props.match.params

2.search参数方式

  //search传参方式 /detail?name=张三&age=20格式
   //引入
   import qs from 'qs'
   
   jsx部分
   (1)标签路由链接跳转方式:
   //路由链接
   二级路由{item.title}
   
   (2)编程式导航方式:
  this.props.history.replace(`/home/message/detail?id=${id}&title=${title}`)

   //路由注册
   
   
   // detail页面接收方式-search接收参数 - 
    // search接收参数
      //旧的方式
      // import qs from 'querystring'
      //新的方式
      import qs from 'qs'

      //qs提供
      //转为字符串 urlencode
      const obj = {name:'张三',age:445};
      console.log(qs.stringify(obj));

      //转为对象
      const str = 'name=张三&age=20';
      console.log(qs.parse(str))

      const {id,title} = qs.parse(this.props.location.search.slice(1))

3.使用state方式

 state优点路径不显示参数

 (1)标签路由链接跳转方式:
  路由链接
   二级路由{item.title}
   
  (2)编程式导航方式:
 this.props.history.replace(`/home/message/detail`,{id,title})

   路由注册
   
   
  /detail 路由接收参数
   //state接收参数方式
   const {id,title} = qs.parse(this.props.location.state)

4.编程式导航

		jsx部分
            //编程式导航链接
             
             

           //编程式导航路由注册
           //params方式注册
            
            //search路由注册方式
              
            //state路由注册方式
            
           
       js部分
            //编程式导航跳转
            replaceShow = (id,title) => {
                //params携带参数
                // this.props.history.replace(`/home/message/detail/${id}/${title}`)
                
                //search携带参数方式
                this.props.history.replace(`/home/message/detail?id=${id}&title=${title}`)

                //state携带参数
                // this.props.history.replace(`/home/message/detail`,{id,title})
            }
			
			
            pushShow = (id,title) => {
                //push携带params参数形式
                //  this.props.history.push(`/home/message/detail/${id}/${title}`);

                //push携带search参数
                this.props.history.push(`/home/message/detail?id=${id}&title=${title}`)

                //state携带参数
                // this.props.history.push(`/home/message/detail`,{id,title})
            }

前进后退 goForward/go/goBack

    forWard = () => {
      this.props.history.goForward()
       }

       go = () => {
           this.props.history.go()
       }

       back = () => {
           this.props.history.goBack()
       }
           

二次封装NavLink,以上代码使用组件使用MyNavLink都是基于此处二次封装

import React, { Component } from 'react'
import {NavLink} from 'react-router-dom';

export default class MyNavLink extends Component {
  render() {
    //children收集标签内容 about的about内容
    // const {children} = this.props
    // console.log(this.props)
    return (
         
    )
  }
}

二.react路由跳转和传参方式-React-Router6(Hook方式实现)

1.params传递参数

 路由链接
{item.title}
编程式 import { useNavigate } from 'react-router-dom' const navigate = useNavigate() navigate(`/detail/${item.id}/${item.content}`) params接收参数方式: //方式一.params接收参数 hook提供useParams const {id,content} = useParams();

2.search传递参数

 路由链接
{item.title}
编程式 import { useNavigate } from 'react-router-dom' const navigate = useNavigate() navigate(`/detail?id=${item.id}&content=${item.content}`) search接收参数方式: const [search,setSearch] = useSearchParams(); const id = search.get('id'); const content = search.get('content');

3.state传递参数

 路由链接
{item.title}
编程式 import { useNavigate } from 'react-router-dom' const navigate = useNavigate() navigate(`/detail`,{ replace:false, state:{ id:item.id, content: item.content} } }) state接收参数方式: import { useLocation } from 'react-router-dom' const {state:{id,content}} = useLocation()

路由注册
1.路由表展示(App.js)
import {Routes,Route,useRoutes} from ‘react-router-dom’;
//jsx部分

   1.标签配置的路由形式
   
    }> }> }> 2.路由表的形式 useRoutes { useRoutes(elements) }

// 路由表动态配置路由
import elements from ‘./routes’;

routes文件-路由表配置例子

import About from '../components/About';
import Home from '../components/Home';
import Message from '../components/Home/Message';
import News from '../components/Home/News';
import Detail from '../components/Home/News/Detail';
import {Navigate} from 'react-router-dom';

const routes = [
    {
       path:'/home',
       element:,
       //二级路由
       children:[
        {
          path:'message',
          element:,
        },
        {
          path:'news',
          element:,
          //三级路由
          children:[
            {
              //1. params参数接收
              // path:'detail/:id/:content',
              //2. search接收参数
              path:'detail',
              element:,
            }
          ]
        }
       ]
    },
    {
      path:'/about',
      element:
    },
    {
      path:'/',
      element:
    },
]

export default routes

2.嵌套路由展示

import { Outlet } from 'react-router-dom'
//jsx中使用Outlet

你可能感兴趣的:(react,react.js)