我在用Om.next中输入字段的数据更新状态时遇到了问题。
读取Om.next中的状态是通过查询来解决的,查询使组件能够独立于上下文实现获取状态,这很棒,因为这意味着组件不需要知道状态原子的结构,它只需要了解与其直接相关的状态原子的本地片段。
不幸的是,我还没能在相反的方向上确定这样做的方法,即基于用户与组件的交互以一种不将其与组件在状态原子中的位置耦合的方式来改变状态。
web上的大多数示例都具有从根开始修改状态原子中的特定路径的变异函数。
(defonce app-state (atom {:badge {:credentials {:user "" :password ""}}}))所以现在我要渲染这个组件:
Object
(render [this]
(dom/div nil
(dom/input #js {:onChange ???
:value {:user value}})
(dom/input #js {:onChange ????
:value {:password value}})))这是一个相当粗糙的示例,但是我如何在用户输入时更新状态,而不考虑它存储在路径[:badge :credentials]下的事实?
读取由查询限定作用域,但突变不是。这是一个简单的人为设计的例子,但当我试图渲染和更新嵌套的树(在编码时)形状未知时,情况会变得更糟。
发布于 2016-11-28 07:26:42
你的:onChange可能会触发你的一个突变:
:onChange (fn [_] (om/transact! this `[(app/set-name { :person 1 :name ~n })]))除了参数和调用突变的地方,这里没有耦合-突变只是一个名字-在这里app/set-name。当然,变异是必须实现的。这就是它:
(defmethod m/mutate 'app/set-name
[{:keys [state] :as env} key {:keys [person name] :as params}]
{:action (fn []
(swap! state update-in [:people/by-id person] assoc :person/name name))})突变代码本身将处理标准化的应用程序状态,这意味着数据的结构形状不是树。
此示例取自:http://localhost:3449/#!/untangled_devguide.G_Mutation
https://stackoverflow.com/questions/40834319
复制相似问题