- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定解决这个问题的最佳方法:
我正在编写一个 Web 应用程序,它为许多“项目”对象实现基本的 CRUD 功能。因此,用户可以创建他/她自己的一组项目。
我编写了一个用于添加/删除/列出项目的 REST API,并且编写了一个 Reagent 前端客户端。正如您所期望的,客户的项目保存在试剂原子 (ratom) 中。
这就是有趣的地方。
在我见过的所有教程中,它向您展示了如何更新ratom,并且您的GUI将自动更新。我有这个,有效。
我当前正在做的是,在更新客户端状态时,我进行 REST POST 调用来更新数据库上的服务器状态。
但是,这感觉不对。我现在将状态存储在两个位置:客户端和服务器上,并且两个位置可能不同。
如果我将其实现为普通的旧网页,服务器会将一个页面发送回客户端,其中包含数据库的最新状态。但是,状态已经存在于客户端的ratom中,我不知道应该如何同步它。
在初始 POST 成功后,我是否应该再次调用服务器(GET 请求)?这可以替换比率的内容。然后我提出两个请求......这看起来很浪费。
Or 是使用 chord 或 sente 之类的东西来异步管理客户端状态的最佳实践。这会更好,因为这意味着其他用户的更改将立即在客户端刷新。但是,我看不到任何教程演示对其中任何一个的 react ,所以也许我走错了路。
所以问题很简单,一个组合应该如何与 REST 使用react?
谢谢
最佳答案
我同意@myguidingstar的观点,你的问题更多的是客户端-服务器同步而不是clojure或reagent。例如,使用 GWT 时您可能会遇到类似的问题(去过那里,...)
Should I make another call to the server (a GET request) after the initial POST is successful? This could replace the contents of the ratom. Then I'm making two requests.. which seems wasteful.
您似乎错过了 POST 请求也可以触发服务器的响应。
这里最大的问题是为什么需要客户端上的数据库状态?您是否有强制要求尽量减少从服务器获取数据的 GET 请求量?或者您是否在客户端(ClojureScript/reagent)端实现了不需要服务器交互的业务逻辑?您还需要考虑同一问题的另一面:如果您的客户端状态一段时间没有更新是否可以,或者您是否会遇到一致性问题,因为“其他东西”正在修改客户端后面的服务器上的数据回来了?
最后你说你
.. don't know how I should synchronise it.
您的问题到底是什么?为什么不在从服务器获取数据后更新应用程序状态 (swap!app-state update-in ...)
,如 reagent-tutorial 中所述。 ?
关于clojure - 在 Reagent/Clojurescript 中保持客户端状态最新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27159921/
为什么该语言的名称是“Clojure”? 我用谷歌搜索了一下,在#clojure 中询问。到目前为止,还没有运气。 最佳答案 Rich Hickey(他是 Clojure 的设计者)对此的评论是 wi
我不明白为什么升级后会出现以下编译错误: Compiling addr-verify.core Exception in thread "main" java.lang.NoClassDefFound
我试图将从映射操作返回的(惰性)序列传递给另一个映射操作,以便我可以在第一个序列中查找元素。代码从文本文件(以行/列格式)解析一些足球装置,清理它,然后返回一张 map 。 这是代码: (ns fix
我想过滤一组,例如: (filter-set even? #{1 2 3 4 5}) ; => #{2 4} 如果我使用clojure.core/filter我得到一个不是集合的seq: (filte
(defn hi[](+ 5 6)) (hi) (defn hi[](+ 6 7)) (hi) 你好,我是 clojure 的新手。如上所述,我编写了两个具有相同名称的函数。我们可以在 cloj
我按照这个伪代码递归地将十进制转换为二进制。 findBinary(decimal) if (decimal == 0) binary = 0 else binar
我正在尝试学习 Clojure 并尝试定义这个简单的函数: user=> (defn triple [arg] (* 3 arg)) #'user/triple user=> (triple 1) 3
是->和 ->>宏只是为了使代码更具可读性还是它们还有其他特定功能? 最佳答案 线程优先( -> )和线程最后( ->> )是为了使代码更具可读性。但这已经很重要了! 它允许取消嵌套函数调用(示例取自
我在 http://www.learningclojure.com/2010/11/yet-another-way-to-write-factorial.html 上找到了这个代码,但我不明白 pop
我正在阅读 Programming Clojure 2nd edition,在第 49 页它涵盖了 Clojure 的 for 循环结构,它说它实际上是一个序列理解。 作者建议使用以下代码: (def
Clojure 中有双端队列吗?我的印象是 Clojure 的 PersistentQueue 是单端的(我错了吗?)。我需要能够从队列的任一端删除(即“pop”)和“peek”数据。我所说的双端队列
换句话说,有没有办法在看起来不像 (MACRO arg* ...) 的表单上触发宏扩展? . 举一个假设的例子: (defmacro my-var (do (printf "Using my-va
我很难理解懒惰。 有人能帮我理解为什么我下面的函数不是懒惰的吗 (defn my-red ([f coll] (my-red f (first coll) (rest coll) ))
在 Clojure 核心中决定参数函数顺序的规则是什么(如果有的话)? 类似 map 的函数和 filter期望数据结构作为最后一个 争论。 类似 assoc 的函数和 select-keys期待数据
我在 clojuredocs 上遇到过 completing 函数,但目前没有文档。 你能提供一些例子吗? 最佳答案 completing 用于扩充可能没有具有一元“完成”元数的一元重载的二元归约函数
这个现在支持吗?我能找到的唯一信息是来自维基的示例( https://github.com/clojure/core.match/wiki/Deftype-and-defrecord-matching
我正在关注“Clojure in Action”,对此我感到困惑: (defn with-log [function-to-call log-statement ] (fn [& args
对于下面的代码,箭头是宏还是函数名称中的简单字符? (来自 here) (defn file->map [file] ;; TODO ) 最佳答案 箭头是函数名称的一部分。有一个函数定义,不是
Clojure 的 range函数包含来自 start独家在end (如果提供)。核心库中是否有一个函数可以提供完全包含(开始和结束)的范围? 我发现在某些情况下必须调整最终值的代码 - 例如向下而不
当我尝试从 REPL 运行以下代码时(使用动态记录): (defrecord (symbol "rec2") (vec (map symbol ["f1" "f2"]))) 我收到错误 Compile
我是一名优秀的程序员,十分优秀!