Dom不会重新渲染模型更改(Elm)

can*_*ayr 5 elm

我正在尝试一个简单的Elm CRUD示例,但是当我将新项添加到模型中的项列表时,DOM不会重新呈现.

现在,我只是添加一个静态记录,我可以确认模型正在通过elm-reactor调试器进行更改,但映射的itemView项目没有使用新的div元素进行更新.

我觉得我可能会错过Elm架构/虚拟dom的一个非常重要的部分.有人能指出我正确的方向吗?

import Html exposing (Html, text, beginnerProgram, div, input, button)
import Html.Events exposing (onInput, onClick)
import List exposing (map, repeat, append)

main =
    Html.beginnerProgram
        { model = model
        , view = view
        , update = update }

type alias Model =
    { items : List Item
    , inputTxt : String }

model : Model
model =
    { items = items
    , inputTxt = inputTxt }

type alias Item =
    { id : Int
    , txt : String }


item : Item
item =
    { id = 0
    , txt = "some text" }

items : List Item
items =
    repeat 2 item

inputTxt : String
inputTxt =
    ""

type Msg
    = NoOp
    | ChangeTxt String
    | AddItem


update : Msg -> Model -> Model
update msg model =
    case msg of
        NoOp ->
            model
        ChangeTxt newTxt ->
            { model | inputTxt = newTxt }
        AddItem ->
            { model | items = model.items ++ [{ id = 0, txt = "some text" }] }

view : Model -> Html Msg
view model =
    div [] [
        div [] [ itemsView items ]
        , div [] [
            input [ onInput ChangeTxt ] []
        ]
        , div [] [
            text model.inputTxt
        ]
        , div [] [
            button [ onClick AddItem ] [ text "click me!" ]
        ]
    ]

itemView : Item -> Html Msg
itemView item =
    div [] [
        div [] [ text ( toString item.id ) ]
        , div [] [ text item.txt ]
    ]

itemsView : List Item -> Html Msg
itemsView items =
    div [] [
        div [] (List.map itemView items)
    ]
Run Code Online (Sandbox Code Playgroud)

rob*_*oby 8

你的view功能的第二行应该是

div [] [ itemsView model.items ]
Run Code Online (Sandbox Code Playgroud)

现在它总是渲染items上面定义的,而不是模型中的项目.