LoginSignup
42
29

More than 5 years have passed since last update.

ElmのHtmlライブラリのメモ

Last updated at Posted at 2015-01-23

elm-lang/html : Html

elm-lang/htmlパッケージは、ElmでHTMLを作るときの基本のパッケージになります。

HTMLのような自然な記述で書くことが出来ます。

使用例ハローワールド

import Html exposing (div,text)

main =
  div [] [text "Hello World"]

Htmlライブラリはvirtual-dom(仮想DOMのライブラリ)をElm用にそのままラップしたものなので、仮想DOMの機能を使うことが出来ます。

クリックできるHTMLなど、イベント系を使うときはElm Architectureのドキュメントも参考にしてみてください。

使い方の参考になるよい作例として、Elm公式のexsampleページや、Elm公式のTODOリストevancz/elm-todomvcがあります。

パッケージのインストールコマンド

elm-package install elm-lang/html --y

Htmlモジュール

Htmlモジュールは、基本になるモジュールでHtml型があって、divタグなどのHTMLを作る関数があります。

例えばdiv関数は以下のように定義されています。

div : List (Attribute msg) -> List (Html msg) -> Html msg
div =
  node "div"

一引数目で、属性を設定できます。(属性を作る関数はHtml.Attributesモジュールにあります。)
二引数目は、子供のHtmlをListで渡すことができます。

hello worldというhtmlを作るコードです。

import Html exposing (div,text)

hello =
  div [] [text "hello"] ---textは何もタグで囲まれていない文字列Html a を作る

world =
  div [] [text "world"]

main =
  div [] [ hello
         , world]

結果のイメージになります。

<div>
    <div>hello</div>
    <div>world</div>
</div>

例えばid属性があるinputタグを作るには以下のようになります。

import Html exposing (input)
import Html.Attributes exposing (id)

main = input [id "Input"] [] ---id は id属性を作る関数
<div>
  <input id="Input">
</div>

ほかにもいろんなタグを作る関数が揃ってます。

Html.Attributesモジュール

HTMLに属性を付けるには、Html.Attributesモジュールにある関数で作ることができます。

class属性、id属性をつけてみます。

import Html exposing (div)
import Html.Attributes exposing (class,id)

main : Html
main = div [class "test"  
           ,id "a"]
           []

結果HTMLイメージ

<div>
    <div class="test" id="a"></div>
</div>

上記のようにclass,id属性をつけて、別途CSSファイルを読みこめば、ちゃんとCSSも適用されます。

CSSは、Html.Attributesモジュールにあるstyle属性を使うと、HTMLに直接インラインでCSSを付けることができます。

style : List (String, String) -> Attribute msg

Html.Eventsモジュール

Html.Eventsモジュール内ある関数を使って、Htmlにイベントの属性を付けることが出来ます。

例えばクリックイベントを付けるにはonClick関数を使います。

onClick : msg -> Attribute msg
onClick msg =
  on "click" (Json.succeed msg)

onclick関数は一引数目にMsg型のデータ構築子を渡す必要があります。イベントを付けたHtmlに発火が起きると、Msg(メッセージ)がupdateに渡ります。

type Msg = Click 
         | Enter 

hello : Html Msg
hello = 
    div [onClick Click] [text "hello"]     ---Clickすると……

update msg model = 
    case msg of 
         Click -> ...                      ---updateにMsgが渡るので、ここの処理が起きる

Html.Lazy

Html.Lazyモジュールにあるlazy関数を使うことで、仮想DOMの力を発揮させて、効率の良い描画ができます。
指定した値が変化した時だけ、その部分を再描画する事ができます。

lazy : (a -> Html) -> a -> Html
lazy = VirtualDom.lazy

一引数目にviewの関数、二引数目の値が変更した時だけviewを更新します。

外部ツール

HTML to ElmはHTMLをElmコード(現在Elm0.17)に変換します。Elm0.17なので多少直す必要があります。atomプラグインとしても公開されています。

42
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
29