gpt4 book ai didi

ClojureScript 循环依赖

转载 作者:行者123 更新时间:2023-12-02 13:03:22 25 4
gpt4 key购买 nike

我正在努力解决 ClojureScript 中的循环依赖问题。我已经尝试这种语言一个月了,还没有使用过真正的语言(Clojure)。

我有一个使用 secretary 的客户端应用程序作为路由器。当我定义路由时,它们是处理函数,将值推送到历史 channel ,然后由显示特定 View 的主应用程序组件使用。因此,我从路由推送的值包含对 view 函数的引用。这个查看函数有om渲染给定位置的组件。在这些 View 函数中,我经常需要生成指向应用程序中其他位置的链接、URL。这些 URL 是从引用它们的相同处理函数生成的。这就是我的循环依赖的诞生。有什么优雅的方法可以解决这个问题吗?

router -> views -> router

--route.cljs

(ns myapp.route
(:require [secretary.core :as secretary :include-macros true :refer [defroute]]
[myapp.views.welcome :as welcome]
[myapp.views.some :as some]))

(defroute home "/" {}
(put! history-chan {:token "/"
:view welcome/view}))

(defroute some "/some" {}
(put! history-chan {:token "/some"
:view some/view}))

--welcome.cljs

(ns myapp.views.welcome
(:require [om.core :as om :include-macros true]
[sablono.core :as html :refer-macros [html]]
[myapp.route :as route]))

(defn view [state owner]
(reify
om/IRender
(render [_]
(html [:div [:a {:href (route/some)}]]))))

最佳答案

Clojure 中的循环依赖没有简单或优雅的解决方案。您很可能必须重构您的代码。你必须花点心思才能找到你喜欢的东西。我可能会做这样的事情:

--route.cljs

(ns myapp.route
(:require [secretary.core :as secretary :include-macros true :refer [defroute]]
[myapp.views.welcome :as welcome]
[myapp.views.some :as some]))

(defroute home "/" {}
(welcome/route))

(defroute some "/some" {}
(put! history-chan {:token "/some"
:view some/view}))

--welcome.cljs

(ns myapp.views.welcome
(:require [om.core :as om :include-macros true]
[sablono.core :as html :refer-macros [html]]))

(declare view)

(defn route []
(put! history-chan {:token "/"
:view view}))

(defn view [state owner]
(reify
om/IRender
(render [_]
(html [:div [:a {:href (route)}]]))))

这只是一种可能的解决方案。

关于ClojureScript 循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23734893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com