React Router頁面傳值的三種方法

來源:互聯網
上載者:User

本文主要介紹React Router定義路由之後如何傳值,有關React和React Router
的基礎請參考阮老師的部落格

註:本文樣本React Router版本為:3.0.2,使用前請注意檢查版本
一.props.params

官方例子使用React router定義路由時,我們可以給<Route>指定一個path,然後指定萬用字元可以攜帶參數到指定的path:
首先定義路由到UserPage頁面:

import { Router,Route,hashHistory} from 'react-router';
class App extends React.Component {  render() {    return (        <Router history={hashHistory}>            <Route path='/user/:name' component={UserPage}></Route>        </Router>    )  }}

上面指定參數一個參數name
使用:

import {Link,hashHistory} from 'react-router';

1.Link組件實現跳轉:

<Link to="/user/sam">使用者</Link>

2.history跳轉:

hashHistory.push("/user/sam");

當頁面跳轉到UserPage頁面之後,取出傳過來的值:

export default class UserPage extends React.Component{    constructor(props){        super(props);    }    render(){        return(<div>this.props.params.name</div>)    }}

上面的方法可以傳遞一個或多個值,但是每個值的類型都是字串,沒法傳遞一個對象,如果傳遞的話可以將json對象轉換為字串,然後傳遞過去,傳遞過去之後再將json字串轉換為對象將資料取出來
如:定義路由:

<Route path='/user/:data' component={UserPage}></Route>

使用:

var data = {id:3,name:sam,age:36};data = JSON.stringify(data);var path = `/user/${data}`;
1.<Link to={path}>使用者</Link>
2.hashHistory.push(path);

擷取資料:

var data = JSON.parse(this.props.params.data);var {id,name,age} = data;

通過這種方式跳轉到UserPage頁面時只能通過傳遞字串來傳遞參數,那麼是否有其他方法來優雅地直接傳遞對象而不僅僅是字串呢。 二.query

query方式使用很簡單,類似於表單中的get方法,傳遞參數為明文:
首先定義路由:

<Route path='/user' component={UserPage}></Route>

使用:

var data = {id:3,name:sam,age:36};var path = {  pathname:'/user',  query:data,}
1.<Link to={path}>使用者</Link>
2.hashHistory.push(path);

擷取資料:

var data = this.props.location.query;var {id,name,age} = data;

query方式可以傳遞任意類型的值,但是頁面的URL也是由query的值拼接的,URL很長,那麼有沒有辦法類似於表單post方式傳遞資料使得傳遞的資料不以明文傳輸呢。 三.state

state方式類似於post方式,使用方式和query類似,
首先定義路由:

<Route path='/user' component={UserPage}></Route>

使用:

var data = {id:3,name:sam,age:36};var path = {  pathname:'/user',  state:data,}
1.<Link to={path}>使用者</Link>
2.hashHistory.push(path);

擷取資料:

var data = this.props.location.state;var {id,name,age} = data;

state方式依然可以傳遞任意類型的資料,而且可以不以明文方式傳輸。

可以在實現後對比地址欄的URL來觀察三種傳值方式URL的區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.