Problem
LHNOptionsList subscribes to the full DERIVED.REPORT_ATTRIBUTES map via useReportAttributes() and passes both a per-row slice (reportAttributes) and the entire map (reportAttributesDerived) to each row. The derived value returns a new reference on every report change, defeating React.memo on all rows.
Proposed fix
Investigate if this subscription can be narrowed down at the row level, e.g.:
useOnyx(ONYXKEYS.DERIVED.REPORT_ATTRIBUTES, { selector: (data) => data?.reports?.[reportID] }) in OptionRowLHNData
- Remove the
reportAttributesDerived prop entirely.
Upwork Automation - Do Not Edit
- Upwork Job URL: https://www.upwork.com/jobs/~022041550799034526884
- Upwork Job ID: 2041550799034526884
- Last Price Increase: 2026-04-07
Issue Owner
Current Issue Owner: @mallenexpensify
Problem
LHNOptionsListsubscribes to the fullDERIVED.REPORT_ATTRIBUTESmap viauseReportAttributes()and passes both a per-row slice (reportAttributes) and the entire map (reportAttributesDerived) to each row. The derived value returns a new reference on every report change, defeatingReact.memoon all rows.Proposed fix
Investigate if this subscription can be narrowed down at the row level, e.g.:
useOnyx(ONYXKEYS.DERIVED.REPORT_ATTRIBUTES, { selector: (data) => data?.reports?.[reportID] })inOptionRowLHNDatareportAttributesDerivedprop entirely.Upwork Automation - Do Not Edit
Issue Owner
Current Issue Owner: @mallenexpensify