Когда вы посмотрите на этот отрывок из «Введения Вяза»:
subscriptions : Model -> Sub Msg
subscriptions model =
Time.every 1000 Tick
Параметр model
, переданный в функцию subscriptions
, должен соответствовать текущей модели приложения, т. Е. Еслимодель изменилась менее чем за 1 секунду, аргумент model
, переданный функции subscriptions
, должен был учитывать эту модификацию.
Как и в JS, существует 3 различных способа сделать переменную, вычисляемую в одной функции update msg model
видимой в другой subscriptions model
:
- сделать ее глобальной,
- сделать его свойством объекта,
- передать его в качестве параметра при вызове B из A.
Но только 2, если у вас есть асинхронный код, как в функции subscriptions
чтобы сохранить синхронизацию вашей модели:
1 - сделайте ее глобальной переменной, затем путем переназначения обновите значение текущей модели:
function app() {
const currentModel = initModel
function update(msg, model) {
const newModel = doSomething(msg, model)
// REASSIGNMENT
currentModel = newModel
}
function subscriptions() {
doSomethingEveryOneSecond(currentModel)
}
}
2 - сделайте его свойством объекта
function app() {
const model = initModel
function update(msg, model) {
// MUTATION
model.value = doSomething(msg, model)
}
// model ALWAYS represents the current model
function subscriptions(model) {
doSomethingEveryOneSecond(model)
}
}
У меня вопрос, как он работает «под капотом» в The Elm Architecture, чтобы поддерживать синхронизацию модели между функциями update
и subscriptions
?
СпасибоLOT!