2015-07-01 69 views
23

是否有可能通過Link組件中的反應路由器傳遞對象?通過反應路由器中的鏈接傳遞對象

喜歡的東西:
<Link to='home' params={{myObj: obj}}> Click </Link>

在我會通過propsParentChild組件相同的方式。

如果它不可能實現這個目標的最佳方式是什麼:
我有一個React + Flux應用程序,我用一些數據呈現表格。我想要做的是當我點擊其中一行時,它會帶我到這個行的一些細節組件。該行有我需要的所有數據,所以我認爲如果我能通過Link就可以了。

另一種選擇是通過url中該行的id,在的詳細信息組件中讀取它,並通過ID從存儲中請求數據。

不知道什麼是實現上述的最佳途徑......

+0

根據如何你整體獲取你的數據,我會說後一種選擇。 –

回答

23

所以我對這個問題的最終結論是,我沒有正確地想。將數據傳遞給Link似乎很自然,所以我可以在我的Child組件中訪問它們。正如Colin Ramsay提到的Link中有一種叫做state的東西,但那不是做這件事的方法。 只有當用戶點擊某物並傳送到Child組件時,數據才通過Link才能正常工作。

當用戶訪問在Link中使用的url時出現問題,則無法獲取數據。

所以在我的情況的解決方案是通過IDLink PARAMS,然後檢查我的Store具有數據(用戶通過Link訪問它),然後讓從Store這個數據。

如果數據不在Store中,則調用action從API中獲取數據。

+0

在react-router 3.0.0中,Link組件沒有「params」屬性。目前的版本如何完成? – Misi

10

不,你不能在params傳遞一個對象,所以我同意你的觀點,你的最佳方案是ID傳遞給一個商店,讓商店發出一個CHANGE事件,並讓組件查詢商店的信息。

3

這是不可能的,你需要傳遞一些可以存儲在URL中的東西,比如字符串ID。然後,您將使用該ID來執行該對象的查找。

+0

唯一的選擇是將對象作爲JSON傳遞,但無論哪種方式,您仍然將其存儲在URL中存儲的表單中。還有一個鏈接狀態支持,你可以看看,但它不是一回事。 –

1

您可以嘗試JSON序列化,然後在接收端對其進行反序列化。

0

可以通過鏈接傳遞對象。在查詢中添加您的數據,而不是PARAMS和字符串化對象:

<Link to={{ pathname: `/blog/${post.id}`, query: { 
 
    title: post.title, 
 
    content: post.content, 
 
    comments: JSON.stringify(post.comments) 
 
} }}>Read More...</Link>

然後在你的子組件解析字符串回一個對象:

JSON.parse(this.props.comments) 
相關問題