elm / virtual-dom

The foundation of HTML and SVG in Elm.
https://package.elm-lang.org/packages/elm/virtual-dom/latest
BSD 3-Clause "New" or "Revised" License
209 stars 80 forks source link

Styles get lost after model update #164

Open simonh1000 opened 4 years ago

simonh1000 commented 4 years ago

Take a look at https://ellie-app.com/7ZFCDMKy54sa1 .

Look at the red square using the dev console and note the padding is a mixture of 5 and 20px. Click the button.

Expect: padding-top of 5px Actual: All mention of padding has been removed from html being rendered

module Main exposing (main)

import Browser
import Dict exposing (Dict)
import Html exposing (Html, button, div, text)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)

type alias Model =
    { styles : Dict String Int }

initialModel : Model
initialModel =
    { styles =
        Dict.fromList
            [ ( "width", 100 )
            , ( "height", 100 )
            , ( "padding", 20 )
            , ( "padding-top", 5 )
            ]
    }

type Msg
    = Increment

update : Msg -> Model -> Model
update msg model =
    case msg of
        Increment ->
            { model | styles = Dict.remove "padding" model.styles }

view : Model -> Html Msg
view model =
    let
        attrs =
            model.styles
                |> Dict.map (\k v -> style k (String.fromInt v ++ "px"))
                |> Dict.values
    in
    div []
        [ div (style "backgroundColor" "red" :: attrs) []
        , button [ onClick Increment ] [ text "Remove one" ]
        ]

main : Program () Model Msg
main =
    Browser.sandbox
        { init = initialModel
        , view = view
        , update = update
        }

Comments:

lydell commented 2 months ago

Probably related: https://github.com/elm/html/issues/145