В XState context — это способ хранения данных в акторе конечного автомата.
Свойство context доступно во всех состояниях и используется для хранения данных, относящихся к актору. Объект context неизменяем, поэтому вы не можете изменять его напрямую. Вместо этого для логики конечного автомата вы можете использовать действие assign(...) для обновления context.
Свойство contextнеобязательно; если конечный автомат указывает только конечные состояния без внешних контекстных данных, ему может не понадобиться context.
1 2 3 4 5 6 7 8 91011121314151617
import{createMachine,createActor}from'xstate';constfeedbackMachine=createMachine({// Инициализация конечного автомата с contextcontext:{feedback:'Некоторый отзыв',},});constfeedbackActor=createActor(feedbackMachine);feedbackActor.subscribe((state)=>{console.log(state.context.feedback);});feedbackActor.start();// выводит 'Некоторый отзыв'
Внимание
context должен быть объектом. Если вам нужно хранить список элементов, оберните его в объект, например: context: { items: [] }.
Установите начальный context автомата в свойстве context конфигурации автомата:
123456789
import{createMachine}from'xstate';constfeedbackMachine=createMachine({context:{feedback:'Некоторый отзыв',rating:5,// другие свойства},});
Объект, который вы передаёте в context, будет начальным значением context для любого актора, созданного из этого автомата.
Внимание
Не изменяйте объект context напрямую. Вместо этого используйте действие assign(...) для иммутабельного обновления context. Если вы будете изменять объект context напрямую, вы можете получить неожиданное поведение, например, изменение context других акторов.
Вы можете предоставить входные данные для начального context автомата, передав свойство input в функцию createActor(machine, { input }) и используя свойство input из первого аргумента в функции context: