«Игровой цикл» Вяза
Это основа веб-приложения, написанного на языке Elm (https://elm-lang.org/). Этот цикл происходит каждый раз, когда что-то происходит. Что-то преобразуется в сообщение (Msg) и отправляется в функцию update (контроллер) вместе с Моделью. Модель содержит все состояние приложения (единственный источник истины). Функция обновления, основанная исключительно на модели и сообщении, может изменить модель и создать один или несколько команды (Cmd). Команды затем выполняются средой выполнения Elm, в то время как новая модель используется для обновления интерфейса приложения после обработки функцией view. Это вкратце все, что вам нужно знать об архитектуре Elm.
Шаги
- Что-то случилось (пример: пользователь нажимает кнопку)
- Сообщение (
Msg
) создается Msg
+Model
отправляются наupdate
update
вернуть новыйModel
и необязательную команду (Cmd
)Cmd
отправляется в механизм эффектов и выполняется (пример: HTTP-запрос)- Новый
Model
отправлен наview
view
вернуть новый HTML- Новый html используется для обновления веб-страницы
- Перейти к шагу 1
Примечания
- Два раздела в небезопасной области (DOM и Effect) похожи в том смысле, что оба вызывают побочный эффект и генерируют сообщения. Разница в том, что DOM изменяет страницу на основе
Model+view
, а эффекты генерируют эффект на основеCmd
- в Elm 0.19
view
может возвращатьDocument msg
вместоHtml msg
, но концепция та же - Безопасная зона - это зона, не имеющая побочных эффектов. Здесь все в чистом и это область, в которой мы пишем наш код.
- Небезопасная область - напротив - здесь наблюдаются побочные эффекты. Мы позволяем Вязу справиться с этой опасной зоной
- Когда я говорю «
Msg
иModel
отправляются вupdate
», я действительно имею в виду, что среда выполнения Elm вызывает функциюupdate
с сообщением и моделью в качестве параметра, как в:update msg model
- Подписки - это еще один инструмент, с помощью которого можно отправлять сообщения. Их нет в анимации, но они ведут себя так же, как Эффект и DOM. Сообщения отправляются из подписок на события Javascript, например изменение размера браузера или отправка данных через порт. Подпись типа
subscriptions : model -> Sub msg
- Сигнатура типа для обновления:
update : msg -> model -> ( model, Cmd msg )
. - Сигнатура типа для представления:
view : model -> Html msg
.
Для получения дополнительных сведений об архитектуре Вяза ознакомьтесь с отличным официальным руководством: https://guide.elm-lang.org/architecture/