gpt4 book ai didi

ClojureScript Re-frame 订阅取消引用困境

转载 作者:行者123 更新时间:2023-12-04 18:01:43 25 4
gpt4 key购买 nike

以下方法中最好的是什么?

外部订阅,早期 deref

(defn component [msg]
[:p msg]))

(let [msg (rf/subscribe [:msg])]
[component @msg]

外部订阅,延迟取消引用
(defn component [msg]
[:p @msg]))

(let [msg (rf/subscribe [:msg])]
[component msg]

内部订阅,提前取消引用
(defn component []
(let [msg @(rf/subscribe [:msg])]
[:p msg])))

内部订阅,延迟取消引用
(defn component []
(let [msg (rf/subscribe [:msg])]
[:p @msg])))

当我使用外部订阅保持内部组件纯时,我最终会得到许多需要通过通常不相关的父级的深层嵌套结构传递的参数。这很容易变成一团糟。

当我在内部组件中订阅时,它变得不纯,失去了易测试性。

另外,我想知道早和晚解引用之间是否有重要区别,除了我必须通过 reagent/atom在测试后者时。

最佳答案

一如既往,我们的答案是“视情况而定”,但是......

外部订阅,早期 deref 导致纯/可测试的内部。因此,当这对您很重要时,这可能是一个不错的选择。但是我们很少使用这种风格。

外部订阅,延迟取消引用 我们已经积极地摆脱了这种风格,因为它产生了我们后来发现难以理解的代码。顺便说一句,如果我们确实传递了ratoms/cursors/subscriptions,我们喜欢放一个尾随*在参数名称上明确表示它们是引用的东西,而不是值。

内部订阅,提前取消引用 可能是最常用的,我猜。一段时间后感觉很自然。也许使用 <sub from LIN

内部订阅,延迟取消引用 这也有效,但我倾向于更喜欢上面的变化。总是担心您可能会忘记添加 @在使用时,这可能是一个烦人的错误。

关于ClojureScript Re-frame 订阅取消引用困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46176515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com