【问题标题】:reagent component that orders spans by their computed sizes按其计算大小排序的试剂组件
【发布时间】:2016-08-24 23:10:17
【问题描述】:

我正在寻找一种设计试剂组件的方法,该组件列出了按实际(计算)宽度排序的单词,它们在浏览器中呈现时会具有这些宽度。 (不是字符数)。

html元素的实际宽度可以通过JavaScript方法offsetWidth来确定。但是,看起来为了获得结果,必须将元素附加到 DOM 中的某个位置。

所以这可以通过以下方式强制解决

  • 创建一个临时的、不可见的容器元素
  • 向其中添加一些包含单词的 span
  • 按 offsetWidth 对它们进行排序
  • 相应地重新附加它们

React/Reagent 方法是什么?

【问题讨论】:

    标签: javascript html reactjs clojurescript reagent


    【解决方案1】:

    一种方法是使用:ref 函数

    (defn sorted-by-width []
      (let [ss (reagent/atom {"the" nil
                              "quick" nil
                              "brown" nil
                              "fox" nil})]
        (fn a-sorted-by-width []
          [:ul
           (for [[s width] (sort-by val @ss)]
             ^{:key s}
             [:li
              [:span
               {:ref (fn text-ref [elem]
                       (when elem
                         (swap! ss assoc s (.-width (.getBoundingClientRect elem)))))
                :visibility (if width "visible" "hidden")}
               s]])])))
    

    ref函数可以记录元素的信息。

    【讨论】:

    • 您的组件运行良好。我试图增强它以跟踪向量内的宽度和高度。这导致组件不断地重新渲染。这个问题在这篇文章中有更详细的描述:stackoverflow.com/questions/39173424/…
    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 2012-08-05
    • 2013-05-25
    • 2012-02-06
    • 2013-06-21
    • 1970-01-01
    • 2010-10-17
    相关资源
    最近更新 更多