Модели¶
В XState вы можете моделировать контекст context
и события event
автомата извне, используя createModel(...)
. Это обеспечивает удобный способ строгого ввода контекста и событий, а также помощников для создания, назначения событий и других деталей реализации в будущем.
Использование createModel(...)
совершенно необязательно и предназначено для улучшения взаимодействия с разработчиками. Основные причины его использования:
- Разделение и организация контекста и событий строго типизированным способом
- Предотвращение проблем с вводом текста с помощью
assign(...)
- Указание создателей событий для более простого и безопасного создания событий
- Возможность совместного использования модели с другими машинами
- Будущие улучшения взаимодействия с разработчиками, такие как определение действий, защитных функций и т. д.
createModel(...)
¶
Функция createModel(...)
принимает:
Параметр | Тип | Описание |
---|---|---|
initialContext | object | Начальное значение контекста |
creators? | object | Объект, содержащий различные создатели событий |
Объект creators
содержит свойства:
Свойство | Тип | Описание |
---|---|---|
events | object | Объект, содержащий создатели событий |
Ключи объекта creators.events
— это типы событий, а значения — это функции, которые принимают любое количество аргументов и возвращают данные события.
Моделирование контекста¶
Поскольку модель определяет контекст автомата, модель можно использовать для определении автомата, чтобы установить ее начальный контекст с помощью model.initialContext
и обновить контекст автомата с помощью model.assign
.
Функция model.assign
типизирована в соответствии с формой контекста модели, что делает ее удобной и надежной заменой действия assign
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Моделирование событий¶
Моделирование событий автомата в модели дает два преимущества:
- События можно создавать, вызывая
model.events.eventName(...)
- Предоставляет информацию о типе для определения автомата, обеспечивая безопасность типов для определений действий
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|
TypeScript¶
Функция createModel(...)
определяет следующие типы:
context
выводится из первого аргумента вcreateModel(initialContext, creators)
event
выводятся изcreators.events
вcreateModel(initialContext, creators)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Создание автомата из модели¶
Вместо того, чтобы явно указывать тип контекста и события как параметры типа в createMachine<TContext, TEvent>(...)
, следует использовать метод model.createMachine(...)
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Сужение типов события¶
Когда действие assign()
упоминается в options.actions
, вы можете сузить тип события, которое передается в действие вторым аргументом model.assign(assignments, eventType)
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Внимание
Назначенные действия с суженными типами событий нельзя помещать в свойство actions: {...}
параметров автомата в createMachine(configuration, options)
. Это связано с тем, что действия в options.actions
должны предполагать потенциально получение любого события, даже если конфигурация машины предполагает иное.
Извлечение типов из модели¶
Начиная с версии 4.22.1
Вы можете извлечь типы контекста и событий из модели, используя типы ContextFrom<T>
и EventFrom<T>
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|