命令和订阅

本书前面部分,我们见到了 Elm 架构如何处理鼠标和键盘交互,但如何与服务器通信?如何生成随机数?

为了回答这些问题,了解 Elm 架构在幕后如何工作的将有所帮助。这将解释为什么与 JavaScript、Python 等语言相比,Elm 语言中的事物工作原理有点不同。

沙盒

我并未大书特书这一点,但迄今为止我们的所有程序都是使用 Browser.sandbox 创建的。我们给出了一个初始 Model,并描述了如何对其进行 updateview

你可以将 Browser.sandbox 视为建立如此系统

我们继续停留在 Elm 世界中,编写函数并转换数据。这会连接到 Elm 的运行时系统。运行时系统会想办法高效地渲染 Html。是否有什么改变?需要进行的最小 DOM 修改是什么?它还会确定何时有人点击按钮或输入文本字段。它会将其转换为 Msg 并将其送入你的 Elm 代码。

通过清晰地分离出所有 DOM 操作,就有可能使用极具侵略性的优化。因此,Elm 的运行时系统是 Elm 成为 可用的最快选项之一 的一个重要因素。

元素

在接下来的几个示例中,我们将使用 Browser.element 来创建程序。这将引入命令订阅的概念,它允许我们与外部世界交互。

你可以将 Browser.element 视为建立如此系统

除产生 Html 值外,我们的程序还将向运行时系统发送 CmdSub 值。这个世界里,我们的程序可以命令运行时系统发出 HTTP 请求或生成随机数。它们还可以订阅当前时间。

我认为当您开始看到示例时,命令和订阅会更有意义,所以,让我们开始吧!

注意 1:一些读者可能担心资产大小。“运行时系统?听起来很大!”其实不然!事实上,与流行的替代方案相比,Elm 资产非常小非常小。

注意 2:我们将在接下来的示例中使用 package.elm-lang.org 中的包。我们已经使用了一些包

但是现在,我们将开始使用一些更好的包

但是,package.elm-lang.org 中还有大量其他软件包!因此,当您在本地创建自己的 Elm 程序时,可能需要在终端中运行如下一些命令

elm init
elm install elm/http
elm install elm/random

这样做将创建一个 elm.json 文件,其中 elm/httpelm/random 作为依赖关系。

我将在以下示例中提到我们正在使用的软件包,因此我希望这对这一切有所了解!

个符合 "" 的结果

    没有符合 "" 的结果