国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

React中路由的參數(shù)傳遞 - 路由的配置文件

這篇具有很好參考價值的文章主要介紹了React中路由的參數(shù)傳遞 - 路由的配置文件。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

路由的參數(shù)傳遞

傳遞參數(shù)有二種方式(需要注意的是, 這兩種方式在Router6.x中都是提供的hook函數(shù)的API, 類組件需要通過高階組件的方式使用):

動態(tài)路由的方式;

search傳遞參數(shù)(查詢字符串);

方式一: 動態(tài)路由的概念指的是路由中的路徑并不會固定:

比如/detail的path對應一個組件Detail;

如果我們將path在Route匹配時寫成/detail/:id,那么 /detail/111、/detail/123都可以匹配到該Route,并且進行顯示;

這個匹配規(guī)則,我們就稱之為動態(tài)路由;

通常情況下,使用動態(tài)路由可以為路由傳遞參數(shù)。

  • 配置動態(tài)路由
render() {
  return (
    <div className='app'>
      <div className='header'>
        <Link to="detail/123">詳情123</Link>
        <Link to="detail/321">詳情321</Link>
        <Link to="detail/aaa">詳情aaa</Link>
      </div>

      <div className='counter'>
        <Routes>
          <Route path='/detail/:id' element={<Detail/>}/>
        </Routes>
      </div>

      <div className='footer'>footer</div>
    </div>
  )
}
  • 在跳轉的頁面中可以通過hook函數(shù)useParms獲取到傳入的id, 由于我們現(xiàn)在使用的是類組件, 無法使用hook函數(shù), 因此需要通過高階組件對當前組件增強(上一篇剛剛講過高階組件的封裝, 這里直接使用, 給到大家代碼)
import { useNavigate, useParams } from "react-router-dom"

export default function withRouter(WrapperComponent) {
  return function(props) {
    const naviagte = useNavigate()
    const params = useParams()
    const router = {naviagte, params}

    return <WrapperComponent {...props} router={router} />
  }
}
  • 使用高階組件增強當前Detail組件, 就可以通過useParams獲取到傳遞的id
import React, { PureComponent } from 'react'
import withRouter from '../hoc/with_router'

export class Detail extends PureComponent {
  render() {
    // 獲取到params
    const { params } = this.props.router

    return (
      <div>
        <h2>Detail</h2>
        {/* 通過params獲取到id并展示 */}
        <h2>id: {params.id}</h2>
      </div>
    )
  }
}

export default withRouter(Detail)

方式二: search傳遞參數(shù)(也就是查詢字符串的方式), 這里在User組件中進行演示

  • 在路由跳轉時拼接上查詢字符串
render() {
  return (
    <div className='app'>
      <div className='header'>
        <Link to="/user?name=chenyq&age=18&height=1.88">用戶</Link>
      </div>

      <div className='counter'>
        <Routes>
          <Route path='/user' element={<User/>} />
        </Routes>
      </div>

      <div className='footer'>footer</div>
    </div>
  )
}
  • 查詢字符串需要通過hook函數(shù)useSearchParams獲取, 所以我們也需要使用高階組件對User組件進行增強
// 封裝的高階組件

import { useNavigate, useParams, useSearchParams } from "react-router-dom"

export default function withRouter(WrapperComponent) {
  return function(props) {
    // 1.導航
    const naviagte = useNavigate()

    // 2.動態(tài)路由的參數(shù)
    const params = useParams()

    // 3.查詢字符串的參數(shù)
    const [searchParams] = useSearchParams()
    const query = Object.fromEntries(searchParams.entries)

    const router = {naviagte, params, query}
    return <WrapperComponent {...props} router={router} />
  }
}
  • 在組件中就可以獲取到參數(shù)
import React, { PureComponent } from 'react'
import withRouter from '../hoc/with_router'

export class User extends PureComponent {
  render() {
    // 獲取高階組件中的query
    const { query } = this.props.router

    return (
      <div>
        <h2>User</h2>
        {/* 通過query獲取參數(shù) */}
        <h2>參數(shù): {query.name}-{query.age}-{query.height}</h2>
      </div>
    )
  }
}

export default withRouter(User)

路由的配置文件

目前我們所有的路由定義都是直接使用Route組件,并且添加屬性來完成的

但是這樣的方式會讓路由變得非?;靵y,我們希望像vue-router那樣, 將所有的路由配置放到一個單獨的文件進行集中管理:

在早期的時候,Router并且沒有提供相關的API,我們需要借助于react-router-config完成;

在Router6.x中,為我們提供了useRoutes API可以完成相關的配置;

例如我們將下面的映射關系配置到一個單獨的文件中

<div className='counter'>
  <Routes>
    {/* 當默認路徑 / 時, 重定向到home頁面 */}
    <Route path='/' element={<Navigate to="/home"/>}></Route>
    {/* 配置二級路由 */}
    <Route path='/home' element={<Home/>}>
      <Route path='/home' element={<Navigate to="/home/recommend"/>}/>
      <Route path='/home/recommend' element={<HomeRecommend/>}/>
      <Route path='home/ranking' element={<HomeRanking/>}/>
    </Route>
    <Route path='/about' element={<About/>}/>
    <Route path='/profile' element={<Profile/>}/>
    <Route path='/category' element={<Category/>}/>
    <Route path='/order' element={<Order/>}/>
    <Route path='/detail/:id' element={<Detail/>}/>
    <Route path='/user' element={<User/>} />
    {/* 當上面路徑都沒有匹配到時, 顯式Notfound組件 */}
    <Route path='*' element={<Notfound/>}/>
  </Routes>
</div>

首先, 使用useRoutes這個API替代原來的Routes和Route組件, useRoutes可以當成一個函數(shù)直接使用, 但是只能在函數(shù)組件中使用

<div className='counter'>
  {useRoutes(routes)}
</div>

再在route/index.js中對映射關系進行配置

import { Navigate } from "react-router-dom"
import Home from '../pages/Home'
import About from '../pages/About'
import Profile from '../pages/Profile'
import Notfound from '../pages/Notfound'
import HomeRecommend from '../pages/HomeRecommend'
import HomeRanking from '../pages/HomeRanking'
import Category from '../pages/Category'
import Order from '../pages/Order'
import Detail from '../pages/Detail'
import User from '../pages/User'

const routes = [
  {
    path: "/",
    element: <Navigate to="/home"/>
  },
  {
    path: "/home",
    element: <Home/>,
    children: [
      {
        path: "/home",
        element: <Navigate to="/home/recommend" />
      },
      {
        path: "/home/recommend",
        element: <HomeRecommend/>
      },
      {
        path: "/home/ranking",
        element: <HomeRanking/>
      }
    ]
  },
  {
    path: "/about",
    element: <About/>
  },
  {
    path: "/profile",
    element: <Profile/>
  },
  {
    path: "/category",
    element: <Category/>
  },
  {
    path: "/order",
    element: <Order/>
  },
  {
    path: "detail/:id",
    element: <Detail/>
  },
  {
    path: "/user",
    element: <User/>
  },
  {
    path: "*",
    element: <Notfound/>
  }
]

export default routes

如果我們對某些組件進行了異步加載(懶加載, 分包處理),那么需要使用Suspense進行包裹:

例如我們對Detail和User進行懶加載(分包處理)

// import Detail from '../pages/Detail'
// import User from '../pages/User'

const Detail = React.lazy(() => import("../pages/Detail"))
const User = React.lazy(() => import("../pages/User"))

并且還需要使用Suspense對組件進行包裹文章來源地址http://www.zghlxwxcb.cn/news/detail-404692.html

root.render(
  <HashRouter>
    <Suspense fallback={<h3>loading</h3>}>
      <App/>
    </Suspense>
  </HashRouter>
)

到了這里,關于React中路由的參數(shù)傳遞 - 路由的配置文件的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • React 事件處理 ( this問題 參數(shù)傳遞 ref)

    React 事件處理 ( this問題 參數(shù)傳遞 ref)

    React事件的命名采用小駝峰方式(cameCase),而不是小寫 使用JSX語法時你需要傳入一個函數(shù)作為事件處理函數(shù),而不是一個字符串 你不能通過返回false 的方式阻止默認行為。你必須顯示式的使用preventDefault 需要謹慎對待JSX回調函數(shù)中的this可以使用: ● 公共屬性(剪頭函數(shù))

    2024年02月22日
    瀏覽(18)
  • React-Router 5.0 制作導航欄+頁面參數(shù)傳遞

    React-Router 5.0 制作導航欄+頁面參數(shù)傳遞

    使用 React 構建 SPA 應用(單頁面應用),要想實現(xiàn)頁面間的跳轉,首先想到的就是使用路由。在 React 中,常用的有兩個包可以實現(xiàn)這個需求,那就是 react-router 和 react-router-dom 。本文主要針對 react-router-dom 進行說明。 眾所周知, JS 由 DOM BOM ECMAScript 組成, React-Router-Dom 使用 BOM 提供

    2024年02月08日
    瀏覽(17)
  • element ui框架(路由參數(shù)傳遞)

    【 聲明:版權所有,歡迎轉載,請勿用于商業(yè)用途。 聯(lián)系信箱:feixiaoxing @163.com】 ? ? ? ? 前端開發(fā)中,有的時候路由也是需要帶參數(shù)傳遞的。不管是窗口登錄,還是超鏈接,一般會帶1個或者多個參數(shù)。如果是多個參數(shù),通常就用分隔符把它們連接在一起。vue工程下面的參

    2023年04月24日
    瀏覽(19)
  • Vue頁面路由參數(shù)的傳遞和獲取

    Vue頁面路由參數(shù)的傳遞和獲取

    vue 頁面路由切換時傳參的方式有如下幾種: 動態(tài)路由參數(shù) 它隱藏字段信息,相對于來說較安全,同時地址欄中的地址也相對較短 它必須是先定義后使用,一般用于根據(jù)固定參數(shù),返回對應的數(shù)據(jù)所用 query字符串 ?id=1 通過search字符串的方式來在地址欄中傳遞數(shù)據(jù),相對于來

    2024年02月11日
    瀏覽(17)
  • uniapp,vue3路由傳遞接收參數(shù)

    官網(wǎng)vue2升vue3的教程中,演示了如何使用onLoad,記得把官網(wǎng)所有內容都看一遍?。。?傳遞對象參數(shù) 接收對象參數(shù)

    2024年02月15日
    瀏覽(16)
  • 微信小程序路由以及跳轉頁面?zhèn)鬟f參數(shù)

    微信小程序路由以及跳轉頁面?zhèn)鬟f參數(shù)

    路由 在app.json的pages里面寫 \\\"pages/頁面/頁面\\\" 直接保存pages直接生成非常方便 ?跳轉頁面 wx.navigateTo() 保留當前頁面,跳轉到應用內的某個非tabBar頁面。 text?bindtap=\\\"daka\\\"點擊/text 會保留返回箭頭 底部導航跳轉在app.json寫入即可 傳參以及接收參數(shù) 1、本地存儲 使用方法:和js差不

    2024年02月11日
    瀏覽(26)
  • 探討uniapp的路由與頁面棧及參數(shù)傳遞問題

    探討uniapp的路由與頁面棧及參數(shù)傳遞問題

    框架以棧的形式管理當前所有頁面, 當發(fā)生路由切換的時候,頁面棧的表現(xiàn)如下: 頁面的路由操作無非:初始化、打開新頁面、頁面重定向、頁面返回、tab切換、重加載。 uni-app 有兩種頁面路由跳轉方式:使用navigator組件跳轉、調用API跳轉。 2.1navigator 頁面跳轉。該組件類似

    2024年02月11日
    瀏覽(20)
  • Vue 整合 Element UI 、路由嵌套和參數(shù)傳遞(五)

    Vue 整合 Element UI 、路由嵌套和參數(shù)傳遞(五)

    1.1 工程初始化 ????????使用管理員的模式進入 cmd 的命令行模式,創(chuàng)建一個名為 hello-vue 的工程,命令為: 1.2 安裝依賴 ????????我們需要安裝 vue-router 、 element-ui 、 sass-loader 和 node-sass 四個插件 1.3 npm 命令解釋 ???????? npm install moduleName :安裝模塊到項目目錄下

    2024年02月13日
    瀏覽(18)
  • Postman中,既想傳遞文件,還想傳遞多個參數(shù)(后端)
  • postman同時傳遞文件和對象參數(shù)

    postman同時傳遞文件和對象參數(shù)

    ?對象屬性 ?BaseInfoReqDTO BaseInfo? postman測試 { \\\"baseInfo\\\": { \\\"funcFlag\\\": \\\"ZT066\\\", \\\"transNo\\\": \\\"201208021201010001\\\", \\\"transrDate\\\": \\\"2012-08-17\\\", \\\"transrTime\\\": \\\"13:43:40\\\", \\\"operator\\\": \\\"C\\\", \\\"fromSys\\\": \\\"1\\\", \\\"toSys\\\": \\\"1\\\", \\\"sourceId\\\": \\\"1\\\" }, \\\"taskCode\\\": \\\"123456789\\\", \\\"isReinsuredLetters\\\": \\\"N\\\", \\\"reinsuredResult\\\": \\\"1\\\", \\\"isReinsured\\\": \\\"Y\\\" } @RequestPart和@

    2024年02月06日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包