2015-07-01 68 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) 
相关问题