1

ClojureScript アプリを作成していますが、試薬を使用してテーブルにデータを入力するのに問題があります。私が抱えている2つの問題は、フォームの大量の警告です

Every element in a seq should have a unique :key

また、レンダリングを行う関数を呼び出すとすぐに正しくレンダリングされ、ページ全体がフリーズし、ページをリロードすることが唯一の修正方法です。これらは私の2つの機能です:

(defn foo
  []
  [:table
   (for [i (range 10)]
     [:tr (for [j (range 3)]
            [:td (str "Row " i ", Col " j)])])])

以下を呼び出すと、正しくレンダリングされますが、警告が表示され、ページがフリーズします。

(reagent/render [foo] (dom/getElement "results"))

データを入力するプロセスに間違った方法で取り組んでいますか? もっと簡単な方法はありますか?

4

1 に答える 1

4

あなたが得ている警告は、これらの線に沿って作成された動的要素に対して一意のキー値を必要とする試薬によるものです。これを修正するには、いくつかの方法があります。もう 1 つ注意する必要があるのは、 for を使用すると遅延シーケンスが生成されるため、使用時に問題が発生する可能性があることです。これはこのコンテキストでは機能しますが、再レンダリングで微妙​​な問題が発生する可能性があります。

私のアドバイスは、td要素をレンダリングする関数を作成し、レンダリングの前に

^{:key (str i j)} [:td (str "Row " i ", Col " j)]

(str ij) は、td 要素ごとに一意のキーを作成します。私が便利だと思うもう1つのことは、ieに使用することです

(into [:tr]
  (for [j (range 3)]
    ^{:key (str i j)} [:td ....])))

試薬を使用して独自のアプリを開発しています。これは優れたコードではなく、まだ多くのリファクタリングが必要ですが、このようなテーブル、ページ付けされたテーブル、およびタブ、サイドバー メニューなどの他のいくつかの試薬コンポーネントを作成しました。 github arcis project他に何もないとしても、いくつかのアイデアが得られるはずです

Re-frame wikiには、試薬とそのレンダリング方法、およびいくつかの微妙な「落とし穴」に関する優れたドキュメントもあります。

于 2015-12-04T02:32:34.437 に答える