2016-05-12 63 views
1

正如the upgrade guide中所述,Effects正在被這個新的Applicative Functor-like事物Cmd所取代。我沒有看到任何關於Effects.tick可能隱藏的線索,或者它可以如何重新實現的線索。Effects.tick replacement for elm 0.17

從事物的外表,Process.sleep可能是正確答案,像

Task.perform errorHandler (\x -> x) <| Process.sleep 
            <| 500 * Time.millisecond 

將使過程中發出一條消息/動作之前等待500毫秒。我只是不確定這是什麼取代 Effects.tick從長遠來看,雖然。

回答

3

Effect.tick功能被AnimationFrame替換。

你基本上訂閱了一組msg的任一次或差異。並做出相應的反應

import Html exposing (..) 
import Html.App as App 
import AnimationFrame 
import Time exposing (Time, second) 

main = 
    App.program 
    { init = Model 0 0 ! [] 
    , update = \msg model -> update msg model ! [] 
    , view = view 
    , subscriptions = \_ -> AnimationFrame.diffs identity} 

type alias Model = 
    { timeSinceLastIncrement : Time 
    , counter : Int } 

incrementTime = 1*second 

update diff {timeSinceLastIncrement, counter} = 
    if timeSinceLastIncrement > incrementTime then 
    Model 0 (counter+1) 
    else 
    Model (timeSinceLastIncrement+diff) counter 

view {counter} = 
    div [] [text (toString counter)] 

我選擇時間的diff直接發送的消息和解壓模型的結構,既updateview用於將組件更容易獲得。在更復雜的應用程序中,您可能會收到類似Tick Time消息的內容。