首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用atom作为本地(词法)状态的Figwheel可重载代码?

使用atom作为本地(词法)状态的Figwheel可重载代码?
EN

Stack Overflow用户
提问于 2020-10-14 23:30:34
回答 1查看 41关注 0票数 0

根据我的项目,我正在向使用代理的状态的合适设计方向发展,同时仍然使用不同的原子(我可能会切换到单个原子,但目前正在尝试探索可能性的空间),我已经尝试在根组件的词汇上下文中设置所有状态,如下所示。我的想法是这个app-state是一个普通的clojure map,其中每个键的值都是一个试剂原子。

它接收一个attrs映射,这是一个属性(来自html元素上的data-属性),它的工作是初始化一个app-state映射,这个映射本身不是一个r/atom,但包含r/atoms。问题是,当在文件的顶部声明时,所有这些r/atom都是用defonce定义的,这就是我刚刚切换的地方,现在defonce语义丢失了& figwheel热重载被破坏。

在这种风格下设置状态时,有没有办法保留可重载的代码?

我不能将defonce放在let中,因为以后计算它时,它的计算结果将为零。

或者是我遗漏了什么模式。

代码语言:javascript
复制
(defn a-root-component [attrs]
  (let [app-state {:some-state (r/atom (:some-state attrs))}]
    (fn [attrs]
      [some-component app-state])))
EN

回答 1

Stack Overflow用户

发布于 2020-10-15 07:04:52

从技术上讲,你可以使用memoize,但我不会。通过使用memoize,你引入了隐藏的全局状态,巧妙地隐藏在没有人会去寻找的地方。最好在主组件之外defonce你的状态,并对它进行显式的说明。

考虑到您的发展方向,我会仔细研究一下re-frameKeemcha之类的东西,它们提供了成熟的模式和工具,用于以合理的方式使用集中式状态。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64356712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档