Elm-在Elm中动态更新字段
我复制了这段代码,所以任何人都可以试用 我将字段最小化为两个(title和slug),但还有其他类似的字段:content、extractElm-在Elm中动态更新字段,elm,Elm,我复制了这段代码,所以任何人都可以试用 我将字段最小化为两个(title和slug),但还有其他类似的字段:content、extract 我是否可以在不为所有字段创建案例的情况下更新记录,比如只更新必要的字段而不检查所有字段?我会在您的代码中更改以下内容: 如果您对每个操作都有一条特定的消息,那么您可以使用更干净的update和view功能。编译器还将帮助您检查是否处理了所有情况,并且没有传递无意义的参数 type Msg = NoOp | NewPostTitle Post Stri
我是否可以在不为所有字段创建案例的情况下更新记录,比如只更新必要的字段而不检查所有字段?我会在您的代码中更改以下内容: 如果您对每个操作都有一条特定的消息,那么您可以使用更干净的
update
和view
功能。编译器还将帮助您检查是否处理了所有情况,并且没有传递无意义的参数
type Msg
= NoOp
| NewPostTitle Post String
| NewPostSlug Post String
这不会为您节省太多输入,但您的更新将如下所示。请注意,您不再有嵌套模式匹配。另外,请注意的语法,一次一个字段
update msg model =
case msg of
NoOp ->
( model, Cmd.none )
NewPostTitle currentPost value ->
( { model | newPost = { currentPost | title = value } }, Cmd.none )
NewPostSlug currentPost value ->
( { model | newPost = { currentPost | slug = value } }, Cmd.none )
最后,在您的视图中,您不必传递string参数,这使代码更加简洁。但真正重要的是,现在它是类型安全的
view model =
div []
[ h1 [] [ text ("title : " ++ model.newPost.title ++ " | slug : " ++ model.newPost.slug) ]
, input [ onInput (NewPostTitle model.newPost), placeholder "Title" ] []
, input [ onInput (NewPostSlug model.newPost), placeholder "Slug" ] []
, button [] [ text "Save" ]
]
我会在您的代码中更改以下内容:
如果您对每个操作都有一条特定的消息,那么您可以使用更干净的update
和view
功能。编译器还将帮助您检查是否处理了所有情况,并且没有传递无意义的参数
type Msg
= NoOp
| NewPostTitle Post String
| NewPostSlug Post String
这不会为您节省太多输入,但您的更新将如下所示。请注意,您不再有嵌套模式匹配。另外,请注意的语法,一次一个字段
update msg model =
case msg of
NoOp ->
( model, Cmd.none )
NewPostTitle currentPost value ->
( { model | newPost = { currentPost | title = value } }, Cmd.none )
NewPostSlug currentPost value ->
( { model | newPost = { currentPost | slug = value } }, Cmd.none )
最后,在您的视图中,您不必传递string参数,这使代码更加简洁。但真正重要的是,现在它是类型安全的
view model =
div []
[ h1 [] [ text ("title : " ++ model.newPost.title ++ " | slug : " ++ model.newPost.slug) ]
, input [ onInput (NewPostTitle model.newPost), placeholder "Title" ] []
, input [ onInput (NewPostSlug model.newPost), placeholder "Slug" ] []
, button [] [ text "Save" ]
]
是的,我一开始是这样做的,我在寻找更有效的方法,而不是对每个字段进行函数更新,(我有一些模型有超过12个字段)我喜欢这个答案,因为Elm记录是静态类型。如果我想有一些动态的东西,那么我会使用Dict
或其他东西。谢谢大家,我认为这是Elm的方式,写得太多了,我会坚持下去。是的,我一开始是这样做的,我在寻找更有效的方式,而不是对每个字段都进行函数更新,(我有一些模型有超过12个字段)我喜欢这个答案,因为Elm记录是静态类型。如果我想有一些动态的东西,那么我会使用Dict
或其他东西。谢谢大家,我认为这是Elm的方式,写得太多了,我会坚持下去