clojurescript - Cojurescript Om : handling local state changes in different components

标签 clojurescript om

我正在构建一个基于 om 的表单,可以查看折叠或展开的小节。
View 状态保存在子部分本地状态中:

(defn subsection-view [subsection owner]
(具体化
om/IInitState
(初始状态 [这个]
{:collapsed true}))

问题是每个小节 View 状态可以通过折叠展开全部按钮或为每个小节显示的单独按钮以两种方式影响。

为了处理 expand-compress-all 有一个全局折叠状态保存在表单本地状态中:

(defn 表单 View [数据所有者]
(具体化
om/IInitState
(初始状态 [这个]
{:all-collapsed true})))

显然两个按钮on-click事件通过更新本地状态中的折叠状态来处理。

(om/update-state!owner:collapsed not)

我的问题是我应该如何知道哪个状态是 最后更新 为了显示正确的 View ?

或者哪里是正确的地方 (本地状态或应用程序状态)保存可能受组件树不同级别中不同触发器影响的折叠状态?

最佳答案

我是 core.async 的粉丝,我会使用 channel 来实现它。我会让各部分监听折叠/展开消息,并在出现时更改本地状态。本地状态更改将导致重新绘制。展开单个部分只会更新该部分的本地状态。

关于clojurescript - Cojurescript Om : handling local state changes in different components,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28746714/

相关文章:

clojure - 如何将单个 clojurescript 文件作为脚本执行?

clojure - 如何内存一个使用 core.async 和非阻塞 channel 读取的函数?

unit-testing - 通过模拟请求使用异步 api 调用测试组件

clojurescript - Om Next read multi-fn 未在二级连接中调用,查询 AST 未完全解析,因此组件仅接收标识

clojurescript - om - ajax 调用后数据未更新

clojurescript - 原子包、clojurescript、谷歌闭包和依赖管理

clojure - 显示为文本字段的 Reagent-Forms 单选按钮

clojurescript - 如何从 Om DIV 获取 DOM 元素?

reactjs - 是否可以在 ClojureScript Om 应用程序中重用现有的 React 组件?

clojurescript - OM 组件与普通函数