Readonly
schemaReadonly
contextКонтекст
Неизменяемый объект значений контекста.
Для доступа к значениям всего объекта, должна использоваться деструктуризация {...context}
Подписка на обновления контекста
test("обновление значения", () => {
const { onUpdate, update } = new Context((types) => ({
string: types.string,
array: types.array.required([0, 1]),
}))
onUpdate((updated) => {
expect(Array.isArray(updated.array), "должен быть массив").toBe(true)
expect(Object.isFrozen(updated.array), "массив должен быть frozen").toBe(true)
expect(updated, "значение быть равно переданному").toEqual({ array: [2, 3, 4] })
expect(updated.string, "значения которые не были обновлены не должны быть в обновлении").toBeUndefined()
})
update({ array: [2, 3, 4] })
})
test("без изменений — пусто", () => {
const { onUpdate, update } = new Context((types) => ({ number: types.number.required(1) }))
let count = 0
onUpdate(() => count++)
update({})
expect(count, "обновление не должно быть вызвано").toBe(0)
})
test("повтор того же значения — не эмитит", () => {
const { onUpdate, update } = new Context((types) => ({ number: types.number.required(1) }))
let count = 0
onUpdate(() => count++)
update({ number: 1 })
expect(count, "обновление не должно быть вызвано").toBe(0)
})
test("отписка от обновлений", () => {
const { onUpdate, update, context } = new Context((types) => ({ count: types.number.required(0) }))
let count = 0
const unsubscribe = onUpdate(() => count++)
update({ count: 1 })
expect(context.count, "обновление должно быть вызвано").toBe(count)
unsubscribe()
update({ count: 2 })
expect(context.count, "контекст должен быть обновлен").toBe(2)
expect(count, "обновление не должно быть вызвано").toBe(1)
})
Схема контекста