我对榆树很新,但慢慢熟悉它.我正在做一些简单的Http请求,它在各个方面都很成功(我得到要显示的数据等)
目前我只能让我的fetchData触发onClick,我想在init上初始化它,但是我无法绕过这个问题.
....这是我的fetchData函数:
fetchData : Cmd Msg
fetchData =
Http.get repoInfoListDecoder "http://example/api"
|> Task.mapError toString
|> Task.perform ErrorOccurred DataFetched
Run Code Online (Sandbox Code Playgroud)
当前由onClick事件在视图中触发:
.....
, button [ onClick FetchData ] [ text "Load Data" ]
.....
Run Code Online (Sandbox Code Playgroud)
我想避免通过按钮请求数据,而是希望在初始化应用程序时加载数据.这是我的初始:
init =
let
model =
{ message = "Welcome", repos = [] }
in
model ! []
Run Code Online (Sandbox Code Playgroud)
还有我的更新(有点剥离...例如sakes):
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
NoOp ->
model ! []
...........
FetchData ->
{ model | message="hi" } ! [fetchData]
...........
DataFetched repos ->
{ model | repos = repos, message = "The data has been fetched!" } ! []
Run Code Online (Sandbox Code Playgroud)
这有道理吗?我只是在应用程序加载时初始化fetchData时遇到困难,所以我可以显示我的数据而无需点击按钮来获取它.
提前致谢!
hal*_*bra 15
当您使用Html.program时,您的init函数将返回要执行的Model和Command的初始数据.
命令是副作用,如HTTP请求.
尝试更改,init以便立即运行命令:
init: (Model, Cmd Msg)
init =
let
model =
{ message = "Welcome", repos = [] }
in
model ! [ fetchData ]
Run Code Online (Sandbox Code Playgroud)