One click, two subscription models

Hover the boxes for detail

React Context

notifies on value-object identity

selectedFile changes FileSelectionProvider value object selectedFile refineSelection openNodeFromActivity new identity on every change reads selectedFile reads refineSelection FileLink rows reads only openNodeFromActivity (identity never changes) 221 renders per click

Zustand store + selectors

notifies per subscribed field

selectedFile changes Zustand store same three fields selectedFile refineSelection openNodeFromActivity stable identity reads selectedFile reads refineSelection FileLink rows reads only openNodeFromActivity (identity never changes) 0 renders
re-rendered by this click not notified value object gets a new identity
Context notifies on value-object identity; selectors notify per field. The same click on the same state re-renders every Context consumer — including FileLink rows reading a value that never changes — while per-field subscribers of an unchanged field stay at zero.