microsoft / microsoft/GitHubCopilot_Customized

perf: Stabilize Cart context function references with useCallback/useMemo

Open
#15 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
66
Forks
38
Avg merge
21d 15h
Merged PRs (30d)
1

Description

User Story

As a shopper browsing products,
I want the product listing and navigation to remain responsive when I add or modify items in my cart,
so that interacting with the cart doesn't cause unnecessary page slowdowns.

Problem

All functions in CartContext (addToCart, removeFromCart, updateQuantity, clearCart, getTotalItems, getTotalPrice) are recreated on every render and passed directly through context. Every component that consumes CartContext will re-render on any state change, even if the component doesn't depend on the changed value.

// Current — new function references on every render
const addToCart = (product, quantity) => { ... };
const removeFromCart = (productId) => { ... };
// etc.

Acceptance Criteria

  • addToCart, removeFromCart, updateQuantity, clearCart are wrapped with useCallback with correct dependency arrays
  • getTotalItems and getTotalPrice are replaced with memoized values using useMemo
  • Components consuming cart context do not re-render unnecessarily when unrelated cart state changes
  • All existing cart functionality (add, remove, update quantity, clear, totals) continues to work correctly
  • No change to visible behavior for the user

Files

  • frontend/src/context/CartContext.tsx

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with frontend/src/context/CartContext.tsx and inspect how the cart functions and totals are created and passed through context. Verify the dependency choices against existing cart behavior, then confirm the acceptance criteria by checking cart operations and whether consumers avoid unrelated re-renders.

Written by the indexing model from the issue text.

Assessment

Tech stack
react, typescript
Domain
frontend, performance
Issue type
Refactor
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
70/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.