2016-11-08 5 views
2

の場合は、Dynamic t Boolがあり、値がtrueの場合は1つの空のdivが存在し、値がfalseの場合はすべてのdom要素が欲しくなりません。もう少し一般的にReflex Dynamic内の値をどのように分岐できますか?

、私はDynamic t (Either MyA MyB)を持っている、と私はDynamic t MyAまたはDynamic t MyB、私は適切な関数を呼び出す方法をレンダリングするために与えられたレンダリングする方法を知っている機能を持っている場合は?

+1

あなたは 'Dynamic'を参照していますか?(http://hackage.haskell.org/package/b ase-4.9.0.0/docs/Data-Dynamic.html)は通常のデータ型です。 – Alec

答えて

5

あなたはおそらくのいずれかが必要ウィジェット切り替える必要がある場合:あなたは手元にダイナミックを持って述べてきたので

dyn :: MonadWidget t m => Dynamic t (m a) -> m (Event t a) Source 

または

widgetHold :: MonadWidget t m => m a -> Event t (m a) -> m (Dynamic t a) 

を、我々はつもり使用していますdyn

app = do 
    switched <- button "Alternate!" 
    flag <- foldDyn ($) False (not <$ switched) -- just to have some Dynamic t Bool 
    let w = myWidget <$> flag 
    void $ dyn w 

myWidget :: MonadWidget t m => Bool -> m() 
myWidget False = blank 
myWidget True = el "div" $ blank 

あなたワットあれば、基本的なルールは、その反射のhiger次の性質のためでありますあなたが値としてウィジェットを生成するEvent/Dynamicを持つ必要があります。 dynは、そのパラメータとしてDynamic t (m a)を取り(と適切に、widgetHoldEvent t (m a)を取る理由です。そして、我々は値として私たちのウィジェット建物作用を有するダイナミックを持っているDynamic t Bool上にマッピングされてきた理由です。

それはダイナミックでもないことを、言及する価値があります/ widgetHoldはレンダリングを高速化するためにバーチャルdom/diffingを行います。リフレクシヴでは、何が更新されているかをより明示することができます(Dynamic/Event t Textはノード全体を再レンダリングせずにノードテキストに直接影響を与えます)。ページの大部分がスワップされず、パフォーマンスが大幅に低下する可能性があります。

+1

ありがとう!私はdynについて知らなかったし、それは私が一緒に行くものかもしれない。しかし、私はsumの型の中で効率的な更新をしたいので、私はそれが正しいことを完全にはわかりません。私はより詳細なフォローアップを投稿しました。http://stackoverflow.com/questions/40497229/how-can-i-efficiently-branch-on-the-value-inside-a-reflex-dynamic – ajp

関連する問題