Elm “在什么地方?”;Cmd Msg";交付的init函数的名称?
我很难理解Elm “在什么地方?”;Cmd Msg";交付的init函数的名称?,elm,Elm,我很难理解init函数的行为。我正在尝试构建一个登录页面,在页面加载时进入CheckingAuth阶段。这是我的init函数: init : (Model, Cmd Msg) init = (LoginModel Login.CheckingAuth, Cmd.map (\_ -> LoginMsg Login.CheckAuth) Cmd.none) 下面是我的Login.Page模块中的一段代码: type Model = CheckingAuth | Display String
init
函数的行为。我正在尝试构建一个登录页面,在页面加载时进入CheckingAuth
阶段。这是我的init
函数:
init : (Model, Cmd Msg)
init = (LoginModel Login.CheckingAuth, Cmd.map (\_ -> LoginMsg Login.CheckAuth) Cmd.none)
下面是我的Login.Page
模块中的一段代码:
type Model = CheckingAuth | Display String | Redirecting String
type Msg = CheckAuth | AuthResult (Result Http.Error (Either String (Entity User))) | RedirectTo String
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case (Debug.log "MSG DELIVERED" msg) of
CheckAuth -> (CheckingAuth, Debug.log "making API request" <| Http.send AuthResult Api.login)
-- other cases come here
问题是你的init没有做任何事情。如果您在
Cmd.none
上映射任何内容,您仍然有一个Cmd.none
您真正想要发送的命令在更新函数中,因此只需将其直接升级到init,您就可以开始了:
init =
(LoginModel Login.CheckingAuth, Http.send AuthResult Api.login)
您的第二个代码示例中确实有一个命令,因此它会立即返回并传递给update函数,但正如您所看到的,这不是实现目标的最简单方法。好的,我不太理解
Cmd msg
模型。Cmd
本质上不是一个未执行的IO/副作用动作(来自Haskell背景)。无论Cmd是如何构造的(通过Cmd.map或Task.perform),它都不应该交给Elm运行时执行吗?是的。但它不是一个未被释放的效果,而是运行时转化为效果的数据
init =
(LoginModel Login.CheckingAuth, Http.send AuthResult Api.login)