Skip to content

value propagation check #72

@dashed

Description

@dashed

I was thinking on this some more: omniscientjs/omniscient#104 (comment)

Rather than doing this naive check in shouldComponentUpdate, this may be done during development as an indicator that it should never occur. This can warn users that they're not really using the immutable library effectively.

API sketch:

// enable debug mode
if ('production' !== process.env.NODE_ENV) {
    immstruct.debug();
}

const struct = immstruct({foo: [1, 2]});

// adding a listener through .on(), .observe(), etc enables value propagation check.
// 
// internally, do something like this when values are propagated to listeners:
//
// if('production' !== process.env.NODE_ENV && 
//    newRoot.getIn(path) !== oldRoot.getIn(path) && 
//    Immutable.is(newRoot.getIn(path), oldRoot.getIn(path))) {
//
//   console.warn('detected node with distinct reference but have same value');
// }
struct.on('swap', _ => _);

// deliberate bad practice
struct.cursor('foo').update(function() {
     return Immutable.List.of(1, 2);
});

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions