Контекст для MetaFor - v1.0.3
    Preparing search index...

    Class Context<S, C>

    Type Parameters

    • S
    • C extends Schema = NormalizeSchema<S>

    Hierarchy

    • ContextBase<C>
      • Context
    Index

    Constructors

    Properties

    Accessors

    Methods

    Constructors

    Properties

    schema: C
    context: Values<C>

    Контекст

    Неизменяемый объект значений контекста. Для доступа к значениям всего объекта, должна использоваться деструктуризация {...context}

    onUpdate: (callback: (updated: Partial<Values<C>>) => void) => () => void = ...

    Подписка на обновления контекста

    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)
    })

    Accessors

    Methods