2017-02-10 49 views
0

最近,我開始使用React構建一個單頁面應用程序,然後我拿起反應路由器來完成導航部分,但是當需要傳遞頁面之間的參數,我發現官方文檔的解決方案是將參數作爲查詢字符串或參數添加到URL中,這不是我所期望的(我想在傳統的POST方法中保留隱含的參數,與服務器通信)。好或壞,使用瀏覽器狀態傳遞參數歷史

一段時間谷歌搜索後,我找到了解決辦法,請撥打

browserHistory.push({ 
    path : '/Paradise', 
    state : { location : 'Shangri-La'} 
}) 

通過在browserHistory的狀態參數,並檢索使用

this.props.location.state.location 

這工作正常的狀態,這正是我所期望的。我只想知道這是否是一個很好的做法。對不起,我的英文破碎了。

+1

你的英語是絕對不破。但是,除非你真的給自己一個理由,爲什麼你認爲這種方法有什麼問題,或者它不適用於你,這幾乎是一個有見地的問題。到目前爲止,您正在質疑官方文檔中的某些內容,並且工作正常。去自己解釋:) – Gimby

+0

同意@Gimby。你在做什麼是絕對好的。您正在使用位置狀態的方式。如果這是一個好習慣,則取決於整個應用程序。如果你只需要在幾頁之間發送一個狀態,那很好。但是,如果所有頁面都需要這樣做,我建議使用[tag:react-router-relay]查看[tag:react-redux]或[tag:relayjs]。這就是說,你的問題對於這個網站來說有點偏離主題,除了基本上是/否,這裏沒什麼可說的。希望有所幫助。 – Chris

+0

謝謝@Gimby,快速回復。你的意思是說,這是一個官方的方法來操作狀態作爲參數容器,但是我沒有找到來自react-router或W3C html5的官方文檔,你有什麼參考? – Songva

回答

0

好的做法是避免調用它location ..對我來說,我把它叫做previousRoute

另一個很好的做法,我把browserHistory.push包裝在一個名爲redirect的方法中,並放入超類。

class Base extends React.Component { 

    redirect(to, params = {}) { 

     params = Object.assign(params, { previousRoute : this.props.location.pathname}); 
     return browserHistory.push({ 
     path : to, 
     state : params 
     }); 

    } 
} 

然後:

class AnyOtherComponent extends Base { 

    //... you can call 
    this.redirect('Paradise', {param1: val1}); 

}