Todoリストと言っても、フィールドに入力した内容がli
要素として追加されるだけ。
Elm習いたてなので、何か無駄があるかも。
個人的になるほどと思った点はList.map
を利用してli
要素を生成するところで、これは要素を生成する関数が子要素のリストを引数に取るから実現できる。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| import Browser
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick, onInput)
main =
Browser.sandbox { init = init, update = update, view = view }
--Model
type alias Todo =
{ description : String
}
type alias Model =
{ todos : List Todo
, input : Todo
}
init : Model
init =
{ todos = []
, input = Todo ""
}
type Msg = Add | Change String
--Update
update : Msg -> Model -> Model
update msg model =
case msg of
Add ->
{ model | todos = model.input :: model.todos }
Change str ->
{ model | input = Todo str }
-- View
view : Model -> Html Msg
view model =
div []
[ input [ type_ "text", placeholder "What will you do?", onInput Change] []
, button [ onClick Add ] [ text "Add" ]
, ul [] (List.map viewLi model.todos)
]
viewLi : Todo -> Html Msg
viewLi todo =
li [] [ text todo.description ]
|