Home >Web Front-end >HTML Tutorial >Elm架构_html/css_WEB-ITnose

Elm架构_html/css_WEB-ITnose

WBOY
WBOYOriginal
2016-06-21 08:48:561619browse

Elm是一个能够编译成Javascript的函数语言,它可以像React那样作为一个工具用来创建网站或网站应用,Elm 非常简单 易用和优质。

Elm作为函数语言有以下特点:

1.没有运行时的错误,没有null. 没有undefined is not a function.

2.错误信息友好,能够帮助你更快速加入功能。

3.良好架构的代码意味着你的应用代码以良好的构架增长。

4.对所有Elm包自动执行语义版本。.

下面以一个计数器为案例:

<b>import</b> Html exposing (Html, button, div, text)<b>import</b> Html.App as Html<b>import</b> Html.Events exposing (onClick)main =  Html.beginnerProgram { model = 0, view = view, update = update }type Msg = Increment | Decrementupdate msg model =  <b>case</b> msg of    Increment ->      model + 1    Decrement ->      model - 1view model =  div []    [ button [ onClick Decrement ] [ text "-" ]    , div [] [ text (toString model) ]    , button [ onClick Increment ] [ text "+" ]    ]

注意update和 view是完全解耦的,你可以以声明方式描述你的HTML,而Elm会负责与DOM打交道。

Elm是一个针对无限嵌套组件的简单模式,它非常模块化,易于代码重用和测试,能够帮助你方便创建复杂的Web应用。

每个Elm程序逻辑被划分为三个清晰部分:

Model — 你的应用状态

Update — 更新状态的方式

View — 将状态作为HTML显示的方式

Elm架构是一种简单架构Web应用的模式,类似Redux一样声明,这也是它越来越流行的原因。

这个模式非常可靠,可以下面伪代码说明,每次使用只要填空细节就可以:

<b>import</b> Html exposing (..)-- MODELtype alias Model = { ... }-- UPDATEtype Msg = Reset | ...update : Msg -> Model -> Modelupdate msg model =  <b>case</b> msg of    Reset -> ...    ...-- VIEWview : Model -> Html Msgview model =  ...

更详细说明见: http://guide.elm-lang.org/architecture/index.html

Elm 0.17发布以后,引入了消息订阅通过Websocket获得后台状态,只需要两行代码就可以实现和后端服务器交互:

WebSocket.send "ws://echo.websocket.org" input

WebSocket.listen "ws://echo.websocket.org" NewMessage

第一句是向服务器发出数据,第二句是监听服务器的数据,数据内容在NewMessage,NewMessage内容会自动喂给update。

而如果使用Javascript实现这段通讯,将会是非常麻烦,你需要创建一个新的web socket!然后打开一个连接,但是还不能忘记加入对错误的监听,以便连接失败能够重新再连接,并且定义在没有连接时不要发消息(这属于运行错误),你还需要对消息队列化然后再发送,然后确定websocket能被使用并且关闭等等,这些都是涉及大量细节,而声明式编程就应该如上面两行代码直接声明使用,去除了大量技术细节。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn