gpt4 book ai didi

elm - Dom 不会在模型更改时重新渲染 (Elm)

转载 作者:行者123 更新时间:2023-12-04 17:44:08 26 4
gpt4 key购买 nike

我正在尝试一个简单的 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)
]

最佳答案

您的第二行 view功能应该是

div [] [ itemsView model.items ]

现在它总是呈现 items上面定义的,而不是模型中的项目。

关于elm - Dom 不会在模型更改时重新渲染 (Elm),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42102011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com