使用 if 布尔变量在 clojurescript 中切换行 class

switch line class in clojurescript with if boolean variable

如何使用 clojurescript 切换列表中的 li class,当 @switchvar 为真时,所有奇数行都应处于活动状态,否则偶数行应处于活动状态

我尝试了 if 语句,没有任何反应。

(defn listitems [items]
  [:ul
   (for [item items]
     ^{:key item} [:li {:class 
        (if (@switchvar true) 
            ((odd? item) "active") 
            ((even? item) "active") ) 
      } "Item " item ])])

您的 if 语句似乎不正确。你可以这样做:

[:ul (map #(-> [:li {:class %2} "item" %1]) 
          items 
          (cycle ["active" "non-active"]))]

您正在调用 switchvar 原子中的函数,并将其作为参数提供给它 true。最好只是取消引用 (@) 它:

(defn listitems [items]
  [:ul
   (for [item items
         idx (range (count items))]
     ^{:key item} [:li {:class
                        (if (and (odd? idx) (odd? @switchvar))
                          "active"
                          "inactive")
                        } "Item " item])])

我进行了更改,以便每个列表项都有一个不同的 idx。所以 @switchvaridx 都可以改变。我希望您可以更改此代码以满足您的确切需求。

谢谢@all,在您的提示下,我对 clojure 有了一个良好的开端。 switchvar 实际上是布尔值。我将第一个 "inactive" 更改为另一个 if 子句。

(defn lister-items2 [items]
  [:ul
   (for [item items ]
     ^{:key item} [:li {:class
                    (if (and (odd? item) (true? @switchvar))
                      "active"
                      (if (and (even? item) (false? @switchvar))
                        "active"
                        "inactive"))
                    } "Item " item])])