【问题标题】:What is correct way to broadcast secretary URL parameters to reagent component将秘书 URL 参数广播到试剂组件的正确方法是什么
【发布时间】:2016-07-19 22:07:09
【问题描述】:

我正在re-frame default template 之上构建一个应用程序。

我有以下秘书路线:

(defroute "/users/:id" []
  (re-frame/dispatch [:set-active-panel :user-panel])

我想从我的试剂组件中的 URL 访问 id 参数。我发现实现它的唯一方法是将其设置为db。比如:

(defroute "/users/:id" [id]
  (re-frame/dispatch [:set-user-id id])
  (re-frame/dispatch [:set-active-panel :user-panel])

这肯定会污染我的数据库,而且这种方法对我来说似乎很奇怪,因为我曾经在反应中写过这样的东西(使用react-router):

<Route path="/user/:id" component={MyComponent}>
// object with params automatically attached as props to MyComponent

那么将秘书URL参数广播到试剂组件的正确方法是什么?

UPD: 在 cmets 中有一个指向此问题的 github discussion 的链接。一个是指将 URL 参数设置为 db 作为正确的方法。反正我不是很喜欢。它会导致更多的复杂性(设置参数,订阅它们,取消设置)。而且我不喜欢将 URL 参数视为应用程序状态。有什么破解之类的吗?

【问题讨论】:

  • @PiotrekBzdyl 我已经更新了我的问题。如果您有任何技巧,请告诉我,无论如何,谢谢。
  • @PiotrekBzdyl 您能否将其添加为答案。如果几天后没有新内容出现,我会将其标记为正确。感谢您的帮助
  • 我已将我的 cmets 移动到答案中。

标签: javascript clojure clojurescript reagent re-frame


【解决方案1】:

https://github.com/gadfly361/reagent-seed/issues/4 上的讨论似乎完全涵盖了您的情况,我认为这种方法遵循“单一数据库”的重新框架理念,其中您的数据库内容决定了您的应用程序的整个状态(包括面板及其参数) .

我认为这是一个相信单个原子数据库是否是正确方法的问题。直接使用路径参数(例如直接从 URL 读取它们的Route 组件)就像编写一个不使用原子数据库但使用一些替代数据源(在本例中为 URL 路径)的组件。

有人可能会说Route 组件执行您所说的复杂逻辑(它订阅路径更改并管理另一个组件状态)。在这种情况下,您只是重用 Route 组件中的现有代码,而不是在代码中根据秘书路由更新 URL 路径更改的数据库数据。

【讨论】:

    【解决方案2】:

    数据可从您的浏览器 url 获得

    (.. js/window -location -pathname)
    

    然后使用bidi(我们使用bidi和pushy而不是秘书。例如as blogged)然后

    (bidi/match-route your-routes url)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 2012-01-05
      • 2014-11-14
      相关资源
      最近更新 更多