2016-08-24 9 views
1

私は、試薬コンポーネントを設計する方法を探しています。これは、ブラウザでレンダリングしたときの実際の(計算された)幅でソートされた単語をリストします。 (文字数ではありません)。計算されたサイズでスパンを注文する試薬コンポーネント

html要素の実際の幅は、JavaScriptメソッドoffsetWidthによって判断できます。しかし、結果を得るためには、DOMのどこかに要素を追加する必要があります。

は、これは命令的にそのoffsetWidth

  • 応じ
  • それらをreappendingによって

    • それに
    • ソートそれらを単語を含むいくつかのスパンを追加し、一時的な、目に見えないコンテナ要素
    • を作成することによって解決することができます

    React/Reagentアプローチはどのようになりますか?

    答えて

    0

    片道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機能を使用することです。

    +0

    これは非常に興味深いです、私はそれを試してみます.. –

    +0

    あなたのコンポーネントがうまくいきます。私はそれをベクトル内の幅と高さを追跡するために強化しようとしました。これにより、コンポーネントの再レンダリングが一定になります。この問題については、この記事で詳しく説明しています。http://stackoverflow.com/questions/39173424/which-changes-to-clojurescript-atoms-cause-reagent-components-to-re-render –

    関連する問題