Skip to main content

Rerender Defer Reads

Source: .agents/references/coding-standard/vercel-react-best-practices/rules/rerender-defer-reads.md

Metadata

  • title: Defer State Reads to Usage Point
  • impact: MEDIUM
  • impactDescription: avoids unnecessary subscriptions
  • tags: rerender, searchParams, localStorage, optimization

Content

Defer State Reads to Usage Point

Don't subscribe to dynamic state (searchParams, localStorage) if you only read it inside callbacks.

Incorrect (subscribes to all searchParams changes):

function ShareButton({ chatId }: { chatId: string }) {
const searchParams = useSearchParams()

const handleShare = () => {
const ref = searchParams.get('ref')
shareChat(chatId, { ref })
}

return <button onClick={handleShare}>Share</button>
}

Correct (reads on demand, no subscription):

function ShareButton({ chatId }: { chatId: string }) {
const handleShare = () => {
const params = new URLSearchParams(window.location.search)
const ref = params.get('ref')
shareChat(chatId, { ref })
}

return <button onClick={handleShare}>Share</button>
}