Cursors

Cursors allow you to hold a reference to a path in a nested immutable data structure, allowing you to pass smaller sections of a larger nested collection to portions of your application while maintaining a central point aware of changes to the entire data structure: an onChange function which is called whenever a cursor or sub-cursor calls update.

This is particularly useful when used in conjuction with component-based UI libraries like React or to simulate “state” throughout an application while maintaining a single flow of logic.

  1. var Immutable = require('immutable');
  2. var Cursor = require('immutable/contrib/cursor');
  3. var data = Immutable.fromJS({ a: { b: { c: 1 } } });
  4. var cursor = Cursor.from(data, ['a', 'b'], newData => {
  5. data = newData;
  6. });
  7. // ... elsewhere ...
  8. cursor.get('c'); // 1
  9. cursor = cursor.update('c', x => x + 1);
  10. cursor.get('c'); // 2
  11. // ... back to data ...
  12. data.getIn(['a', 'b', 'c']); // 2