React-router(5)params 路由傳參
5、引數
參考 4.params.js
React路由取引數,有兩種:
?a=1
:這種屬於 search 字串,在location.search
裡取值;/a/123
:這種需要從match.params
裡取值;
但無論哪種,路由獲取到的值,是跳轉後的那一刻的值,而不是實時更新的最新值。
具體來說:
- 假如 Link 標籤跳轉路徑實時繫結輸入框的一個值(假如值是
abc
),這個值作為引數傳遞; - 點選跳轉後,子元件讀取到當前傳的值
abc
; - 此時修改【1】中輸入框的值為
def
; - 請問子元件讀取到的值此時是多少?
abc
還是def
; - 答案是
abc
; - 原因是當前路徑是
abc
手動修改位址列的 url:
- 假如手動修改 url 為
ggg
,那麼請問讀取到的值是多少? - 我還真去試了一下。答案是除非你修改後,按回車跳轉路徑,會讀取到最新的;
- 否則,依然保持為修改前
abc
; - 即使你重新觸發 render 方法(比如修改 state 來實現),依然獲取到的是
abc
,而不是ggg
;
獲取最新值:
- 如果你想要獲取到新值,那麼請重新點選跳轉(綁定了新的 url 的 Link 標籤)即可;
- 重新跳轉後(假如跳轉到同一個頁面),url 改變了,那麼元件會重新載入麼?
- 答案是否定的,如果跳轉到同一個元件,僅是引數改變,那麼元件是不會重新載入的,即元件內的資料保持之前不變,只有傳遞的引數改變了(生命週期函式也不會重新執行);
比較特殊的,有關生命週期:
- 元件的生命週期函式,只會在第一次掛載的時候執行,如果前後跳轉是同一個元件,那麼該元件的生命週期函式不會重複執行;
- 但 state 的生命週期,會多次執行(只要父元件的 state 改變了,子元件的相關函式會被執行);
- 由於路由資訊是通過 props 傳值的,因此也會多次觸發;
- 不過沒有影響,傳的值依然是舊值(因為路由資訊沒變);
- 但假如你在 state 生命週期函式裡做了一些什麼事情,可能需要注意一下會不會帶來不良影響(雖然一般不會);
示例:
【例行引入和子元件】
import React from "react";
import {HashRouter as Router, Link, Route} from 'react-router-dom'
const First = props => <div>
第一個元件讀取引數(location.search) {props.location.search}
</div>
const Second = props => <div>
第二個元件讀取引數(match.params.myParams) {props.match.params.myParams}
</div>
【父元件,負責配置路由和傳值】
class RoutingNested extends React.Component {
constructor() {
super()
this.state = {
firstNumber: 0,
secondNumber: 0
}
this.changeFirst = this.changeFirst.bind(this)
this.changeSecond = this.changeSecond.bind(this)
}
render() {
return <div>
<h3>4、React-router 傳參</h3>
<h3>請在對應的跳轉標籤裡,輸入你想要傳的值</h3>
<Router>
<div>
<li>
<Link to={`${this.props.match.url}/1?a=${this.state.firstNumber}`}
onClick={() => {
console.log('Link 標籤(跳轉到/1)的 onClick 事件', this.props.location)
}}>
示例1
</Link>
<input type="text" value={this.state.firstNumber} onChange={this.changeFirst}/>
</li>
<li>
<Link to={`${this.props.match.url}/2/${this.state.secondNumber}`}
onClick={() => {
console.log('Link 標籤(跳轉到/2)的 onClick 事件', this.props.location)
}}>
示例2
</Link>
<input type="text" value={this.state.secondNumber} onChange={this.changeSecond}/>
</li>
<hr/>
<Route path={`${this.props.match.url}/1`} component={First}/>
<Route path={`${this.props.match.url}/2/:myParams`} component={Second}/>
</div>
</Router>
</div>
}
changeFirst(e) {
this.setState({
firstNumber: e.target.value
})
}
changeSecond(e) {
this.setState({
secondNumber: e.target.value
})
}
}
相關推薦
React-router(5)params 路由傳參
5、引數 參考 4.params.js React路由取引數,有兩種: ?a=1 :這種屬於 search 字串,在 location.search 裡取值; /a/123 :這種需
Vue-router(4)之路由傳參、命名路由 和 程式設計式導航
路由傳參 案例:現在需要展示一個電影列表頁,點選每一部電影,會跳轉到該部電影詳情頁(跳轉時攜帶type和id) 程式碼實現(未攜帶type): index.js import Vue from 'vue' // 1. 匯入和安裝 import VueRouter from 'vue-ro
Vue-router(5)之 路由導航守衛
app.vue <template> <div> <h1>App根元件---路由導航守衛</h1> <!-- 路由的佔位符 --> <router-view></router-view>
React-router(8)Link 標籤 to 屬性為物件時(路由資訊傳值)
8、Link 標籤 to 屬性為物件時(路由資訊傳值) 參考 6.routeInfo.js 在元件裡,每個元件的路由資料,都是各自獨立的。 在之前分析中,已知: match 屬性的值,儲存的是該 Route 標籤的路由; location
React Navigation 的使用基礎部分(四)向路由傳值
原文連結還記得我們之前說過"我們講引數的時候會詳細說明"嗎?是的,就是現在。現在我們知道怎樣建立一個包含若干路由的棧導航器,還知道了在路由之間跳轉,現在讓我們來看看跳轉時怎樣向路由傳遞資料。有兩點:可以將引數放進物件中,作為navigation.navigate的第二個引數來
React-router(11)路由配置
11、路由配置 參考 9.routeConfigTable.js 簡單來說,就是有一個物件,如下: const RouteConfig = [ { path: 'first', component:
我的一個React路由巢狀(多級路由),路由傳參之旅
在上一篇react路由之旅中,我們簡單地配置了react,進行了react路由及相關知識的學習,引入以及實現一個區域性跳轉的功能,接下來就是深入學習路由的巢狀以及傳參,這是工作中主要用要的。 我的react已經配置了redux(見我的redux之旅),所以這是在引入的外掛裡做的演示。 從App元件跳轉到New
vue.js路由vue-router(一)——簡單路由基礎
styles mounted num 前言 vue.js ren main.c -s col 前言 vue.js除了擁有組件開發體系之外,還有自己的路由vue-router。在沒有使用路由之前,我們頁面的跳轉要麽是後臺進行管控,要麽是用a標簽寫鏈接。使用vue-rout
Vue-router(1)之路由基礎
1. 使用 <component>標籤實現元件切換 <component> 是Vue提供的;有一個is屬性,is的作用就是顯示指定的元件 <template> <div> <h1>App根元件
一個 Yii + vue 專案(5)vue路由、yii驗證碼
有了一個簡單的驗證方法,於是需要寫一個前端頁面,首先在 vue src/ 建一個單頁面 login.vue <template> <div id="app"> <form> <div>
spring boot 學習筆記 (5) 檔案上傳
一、配置 新增依賴包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</
React-router(10)登入攔截
10、登入攔截 參考 8.needLogin.js 登入攔截說起來比較高大上,其實很簡單。 需要元件: 登入功能元件; 受保護元件(需要登入後才能訪問); 受保護元件的父元件(可選
React學習-- React原始碼(5)diff演算法
diff作為VirtualDOM的加速器,其演算法上的改進優化是React整個介面渲染的基礎和效能的保障。 diff會幫助我們就散出VirtualDOM中真正變化的部分,並只針對該部分進行原生DOM操作,而不是渲染整個頁面。從而保證了每次操作更新後頁面的高效渲
Linux驅動開發(7)——驅動模組傳參
標頭檔案在include/linux/moduleparam.h 傳遞單個引數:module_param(name,type,perm) - name:模組引數的名稱 - type: 模組引數的資料型別(支援int long short uint ulong ushort型
原生ajax使用筆記(二)- - -post方法傳參
原生Ajax的post帶引數方法使用步驟: 1.建立一個核心物件XMLHttpRequest 2.編寫一個回撥函式 3.編寫請求方式和請求路徑(open操作) 4.編寫請求頭 5.傳送請求(send操作) 例子:模擬註冊使用者名稱,若填入的使用者名稱不存在,則提示可以使用;否
(三)執行緒傳參詳解,detach()大坑,成員函式做執行緒函式
陷阱1:子執行緒傳遞引數避免使用指標 先來看一段程式碼: 程式碼乍一看好像沒有什麼問題,執行有時也能成功,但是卻隱含了一個很大的bug。 通過除錯:變數i的地址:0x0076e384 {1},變數mvar和mvary的地址:0x003bfe40 {1},可以看
linux核心探索(3)--系統呼叫(傳參)
踩坑啊啊啊啊啊啊!!! 目錄 10、測試 核心版本: 開始: 1、編寫sys.c /usr/src/linux-4.18.11/kernel/sys.c 新增: #include <linux/linkage.
java呼叫批檔案(.bat)並動態傳參
java程式碼: package test; import java.io.IOException; public class TestMain { public static void main(String [] args) { try { Proc
flask學習筆記(三):URL傳參、URL反轉、重定向
1、URL傳參 對一個固定頁面下傳入url引數。需要給定一個id,並且使用<id>傳參,這樣才能返回一個值。 #-*- coding:utf-8 -*- from flask import Flask app = Flask(__name__) @app.
react-router(不同組件之間傳遞路由)
react router 不同組件 圖解: 代碼: // less require (‘./static/less/index.less‘) // 核心 var React = require(‘react‘) var ReactDom = require(‘react-dom‘) var Rea