Skip to content

deepObserve doesn't respect mobx's observer decorator variants #312

@TomasChmelik

Description

@TomasChmelik

deepObserve observes everything deeply even if property is decorated by @observable.ref or @observable.shallow.

import {observable, makeObserable} from 'mobx'
import {deepObserve} from 'mobx-utils'

class Entity {
    @observable.ref byRef?: Entity
    @observable property = 0

    constructor() {
        makeObserable(this)
    }
}

const entity = new Entity()
const dispose = deepObserve(entity, () => console.log('Change'))

entity.byRef = new Entity() // Outputs "Change" to console (expected)
entity.byRef.property++ // Outputs "Change" to console (unexpected)

dispose()
import {observable} from 'mobx'
import {deepObserve} from 'mobx-utils'

class Entity {
    @observable.shallow shallow: Entity[] = []
    @observable property = 0

    constructor() {
        makeObserable(this)
    }
}

const entity = new Entity()
const dispose = deepObserve(entity, () => console.log('Change'))

entity.shallow.push(new Entity()) // Outputs "Change" to console (expected)
entity.shallow[0].property++ // Outputs "Change" to console (unexpected)

dispose()

MobX version: 6.3.5
MobX-utils version: 6.0.4

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions