Elm更新无限循环
埃尔姆是新来的,所以我可能错过了一些明显的东西 我正在开发一个Elm应用程序,它使用。我遇到了一个无限循环的更新调用。当单击一个元素,然后单击另一个元素时,会发生这种情况。代码如下:Elm更新无限循环,elm,Elm,埃尔姆是新来的,所以我可能错过了一些明显的东西 我正在开发一个Elm应用程序,它使用。我遇到了一个无限循环的更新调用。当单击一个元素,然后单击另一个元素时,会发生这种情况。代码如下: config : DnDList.Config Player config = { beforeUpdate = \_ _ list -> list , movement = DnDList.Free , listen = DnDList.OnDrag , operation
config : DnDList.Config Player
config =
{ beforeUpdate = \_ _ list -> list
, movement = DnDList.Free
, listen = DnDList.OnDrag
, operation = DnDList.Swap
}
system : DnDList.System Player Msg
system =
DnDList.create config DndMsg
type alias Model =
{ navKey : Nav.Key
, room : WebData Room
, dnd : DnDList.Model
, startError : Maybe String
}
type Msg
= RoomReceived (WebData Room)
| DndMsg DnDList.Msg
...
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
RoomReceived room ->
( { model | room = room }, Cmd.none )
DndMsg message ->
let
room = model.room
in
case room of
RemoteData.Success actualRoom ->
let
( dnd, players ) =
system.update message model.dnd actualRoom.players
updatedRoom = RemoteData.map
(\roomData ->
{ roomData | players = players }
) room
in
( { model | dnd = dnd, room = updatedRoom }
, system.commands model.dnd
)
_ ->
( model, Cmd.none )
当我将line system.commands model.dnd更改为Cmd.none时,就不会无限循环调用update函数,但也不会发生任何事情。在dnd列表库中不断被调用的消息是GotDropElement Ok dropElement
同样,对于Elm来说,这是一个新的问题,所以这可能是一个格式不好的问题,但任何帮助都是非常感谢的
谢谢 尝试按照system.Command中的流程进行操作。可能它最终会再次发送消息DndMsg,这就是导致问题的原因 通常认为从命令发送消息不是一种好的做法
如果您无法解决这个问题,在Ellie中提供问题代码的工作示例会有所帮助。解决了这个问题。必须添加订阅才能收听鼠标事件
currentSubs : Model -> Sub Msg
currentSubs model =
case model.page of
GameRoomPage pageModel ->
GameRoom.subscriptions pageModel
|> Sub.map GameRoomMsg
_ ->
always Sub.none model
...
main : Program () Model Msg
main =
Browser.application
{ view = view
, init = init
, update = update
, subscriptions = currentSubs
, onUrlRequest = LinkClicked
, onUrlChange = UrlChanged
}