8

我试图找出通过我的路线传递数据的最佳方式。我知道我可以使用参数,但某些类型的数据不属于参数。

例如:我有一个显示应用程序列表的索引页。每个应用程序旁边都有一个按钮,可将您引导至该应用程序的视图。

我想将应用程序本身传递给应用程序处理程序。但是,通过 params 传递整个应用程序是没有意义的。尽管将应用程序标识符传递给参数(即:id 或 :name)确实有意义

所以我认为我应该这样做的方式是将应用程序标识符传递给参数,然后在应用程序组件中搜索我的 ApplicationStore 以获取给定标识符的适当应用程序。

但是,通过应用程序本身不是更容易更快吗?有没有办法做到这一点。有理由不这样做吗?

这是一些代码:

<Link to="showApplication" params={{name: application.name}}>View</Link>

或者

<Link to="showApplication" params={{application: application}}>View</Link>

提前致谢!

4

2 回答 2

5

问题是当人刷新时,或者以其他方式直接加载url时,它需要显示正确的视图。由于 URL 只是字符串,因此您需要将路由表示为字符串。您不能(轻松)将实际应用程序推入 url。

路由器的工作是获取该字符串(URL)并将其映射到实际代码(处理程序),并提供任何额外的数据(参数、查询和/或哈希)。

作为路由器用户,您的工作是确保 URL 中有足够的信息让路由器选择正确的处理程序,并让处理程序有足够的信息来完成其工作(例如,要显示哪个应用程序)。

如果 url 类似于mysite.com/showApplication,则显然没有足够的信息。

如果是这样的:

mysite.com/showApplication/React.createClass(%7Brender%3A%20function()%7Breturn%20React.createElement('div'%2C%20null%2C%20%22I'm%20an%20application!%22%7D%7D)%3B

即在url 中放置一个应用程序,这是太多的信息,而且通常是一个非常糟糕的主意。

但是mysite.com/showApplication/applicationName刚刚好:-)

于 2015-01-22T07:33:14.807 回答
-1

我将提供一种简单而实用的方法,拥有一个全局对象,您可以使用它来跨路线共享信息,例如。

window.CONTEXT = {'share':'this'}

请注意,仅当您要共享的对象可以由路由本身重新创建时才使用这种方式非常重要,因为上面提到的 FakeRain 路由必须包含足够的信息,以便在用户重新加载时为用户提供相同的体验。

您使用它的唯一原因是如果您需要请求有关您想要共享的信息的信息但又不想要一个巨大的链接,则可以节省带宽。

于 2016-02-23T20:22:06.243 回答