All skills
vercel-labs avatar

/react-best-practices

@d48b8d5 official

React best-practices reviewer for TSX files. Triggers after editing multiple TSX components to run a condensed quality checklist covering component structure, hooks usage, accessibility, performance, and TypeScript patterns.

  • 151 files
  • 448.8 KB
  • Updated last week
  • GitHub

Use this Skill: https://skilld.dev/gh/vercel-labs/vercel-plugin/react-best-practices

This session only. Nothing lands on disk.

upstreamrulesjs-length-check-first.md

≈437 tokens on demand. Your agent reads this file only when SKILL.md points to it.

Early Length Check for Array Comparisons

When comparing arrays with expensive operations (sorting, deep equality, serialization), check lengths first. If lengths differ, the arrays cannot be equal.

In real-world applications, this optimization is especially valuable when the comparison runs in hot paths (event handlers, render loops).

Incorrect (always runs expensive comparison):

function hasChanges(current: string[], original: string[]) {
  // Always sorts and joins, even when lengths differ
  return current.sort().join() !== original.sort().join()
}

Two O(n log n) sorts run even when current.length is 5 and original.length is 100. There is also overhead of joining the arrays and comparing the strings.

Correct (O(1) length check first):

function hasChanges(current: string[], original: string[]) {
  // Early return if lengths differ
  if (current.length !== original.length) {
    return true
  }
  // Only sort when lengths match
  const currentSorted = current.toSorted()
  const originalSorted = original.toSorted()
  for (let i = 0; i < currentSorted.length; i++) {
    if (currentSorted[i] !== originalSorted[i]) {
      return true
    }
  }
  return false
}

This new approach is more efficient because:

  • It avoids the overhead of sorting and joining the arrays when lengths differ
  • It avoids consuming memory for the joined strings (especially important for large arrays)
  • It avoids mutating the original arrays
  • It returns early when a difference is found

Source: SKILL.md on GitHub

No third-party reports yet.

Signed by skilld at d48b8d5. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 10 hours ago.

Activeupdated last week
Other metadata
metadata
{
  "priority": 4,
  "docs": [
    "https://react.dev/reference/react",
    "https://react.dev/learn"
  ],
  "pathPatterns": [
    "src/components/**/*.tsx",
    "src/components/**/*.jsx",
    "app/components/**/*.tsx",
    "app/components/**/*.jsx",
    "components/**/*.tsx",
    "components/**/*.jsx",
    "src/ui/**/*.tsx",
    "lib/components/**/*.tsx"
  ],
  "bashPatterns": [],
  "importPatterns": [
    "react",
    "react-dom"
  ]
}
validate
[
  {
    "pattern": "from\\s+['\"](styled-components|@emotion/styled|@emotion/react|@mui/material|@chakra-ui/react)['\"]|styled\\.",
    "message": "Legacy CSS-in-JS or component library detected. Consider shadcn/ui + Tailwind for modern Vercel-native UI.",
    "severity": "warn",
    "upgradeToSkill": "shadcn",
    "upgradeWhy": "Migrate from CSS-in-JS/MUI/Chakra to shadcn/ui + Tailwind CSS for better SSR performance and Vercel ecosystem alignment.",
    "skipIfFileContains": "@/components/ui|shadcn|tailwindcss"
  }
]
retrieval
{
  "aliases": [
    "react review",
    "component quality",
    "tsx linter",
    "react patterns"
  ],
  "intents": [
    "review react code",
    "improve component quality",
    "check accessibility",
    "optimize react"
  ],
  "entities": [
    "hooks",
    "accessibility",
    "React",
    "TSX",
    "component"
  ]
}
chainTo
[
  {
    "pattern": "from\\s+['\\\"](styled-components|@emotion/styled|@emotion/react|@mui/material|@chakra-ui/react)['\"]|styled\\.",
    "targetSkill": "shadcn",
    "message": "Legacy CSS-in-JS or component library detected — loading shadcn/ui guidance for modern Vercel-native UI."
  }
]

README badge

README badge for vercel-labs/vercel-plugin/react-best-practices