如何在重构中抽象 `reg-sub`
How to abstract `reg-sub` in reframe
在我的代码中,有这样的重复:
(reg-sub
:hello-john
(fn [ db [ _ say-hi ]
(str (get-in db [ say-hi ]) "hello John")
)
(reg-sub
:hello-jack
(fn [ db [ _ say-hi ]
(str (get-in db [ say-hi ]) "hello Jack")
)
这种模式非常乏味,我尝试在 sub.cljs
中使用以下代码进行分解:
(for [ [x y] [[:hello-john "hello John"]
[:hello-jack "hello Jack"]] ]
(reg-sub
x
(fn [ db [ _ say-hi ]
(str (get-in db [ say-hi ]) y ))
)
但它并没有像预期的那样工作。感谢阅读本文感谢任何帮助:)
您的第二个代码块缺少结尾 "
。
另一件事是 for
是惰性的——它不会被自己评估。将其替换为 doseq
.
最后,一件小事 - 不要使用 (get-in db [say-hi])
,而是使用 (get db say-hi)
。如果 say-hi
在您的情况下始终是关键字,则可以使用 (say-hi db)
.
为什么不
(reg-sub
:say-hello
(fn [ db [ _ person say-hi ]
(str (get-in db [ say-hi ]) "hello " person)
)
在我的代码中,有这样的重复:
(reg-sub
:hello-john
(fn [ db [ _ say-hi ]
(str (get-in db [ say-hi ]) "hello John")
)
(reg-sub
:hello-jack
(fn [ db [ _ say-hi ]
(str (get-in db [ say-hi ]) "hello Jack")
)
这种模式非常乏味,我尝试在 sub.cljs
中使用以下代码进行分解:
(for [ [x y] [[:hello-john "hello John"]
[:hello-jack "hello Jack"]] ]
(reg-sub
x
(fn [ db [ _ say-hi ]
(str (get-in db [ say-hi ]) y ))
)
但它并没有像预期的那样工作。感谢阅读本文感谢任何帮助:)
您的第二个代码块缺少结尾 "
。
另一件事是 for
是惰性的——它不会被自己评估。将其替换为 doseq
.
最后,一件小事 - 不要使用 (get-in db [say-hi])
,而是使用 (get db say-hi)
。如果 say-hi
在您的情况下始终是关键字,则可以使用 (say-hi db)
.
为什么不
(reg-sub
:say-hello
(fn [ db [ _ person say-hi ]
(str (get-in db [ say-hi ]) "hello " person)
)