【问题标题】:React-router: Passing data through routesReact-router:通过路由传递数据
【发布时间】:2015-03-20 17:35:28
【问题描述】:

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

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

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

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

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

这是一些代码:

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

或

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

提前致谢!

【问题讨论】:

  • 你最后是怎么解决的?我认为第一个答案不是你想要的。
  • 我也有同样的问题 :(

标签: reactjs reactjs-flux react-router


【解决方案1】:

问题是当人刷新时,或者以其他方式直接加载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 正好:-)

【讨论】:

  • 嗯,你忘了一个实际的用例,在我的例子中,我通过一堆 ajax 请求生成一个对象;我通过参数将一些信息(包括 id)发送到不同的路由,我可以通过 id 重新生成整个对象,没问题,但是如果我可以发送对象,我会节省带宽,如果对象未定义,它'将由id重新生成,一个实际的用例。
【解决方案2】:

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

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

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

如果您需要为想要共享的内容请求信息但又不想要一个巨大的链接,那么您使用它的唯一原因是节省带宽。

【讨论】:

    猜你喜欢
    • 2016-10-14
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 2018-04-22
    相关资源
    最近更新 更多