js-tosorted-immutable

📁 theorcdev/8bitcn-ui 📅 Jan 23, 2026
17
总安装量
12
周安装量
#20184
全站排名
安装命令
npx skills add https://github.com/theorcdev/8bitcn-ui --skill js-tosorted-immutable

Agent 安装分布

claude-code 9
opencode 8
codex 8
windsurf 8
gemini-cli 7
antigravity 7

Skill 文档

Use toSorted() Instead of sort() for Immutability

.sort() mutates the array in place, which can cause bugs with React Use .toSorted() to create a new sorted array without state and props. mutation.

Incorrect (mutates original array):

function UserList({ users }: { users: User[] }) {
  // Mutates the users prop array!
  const sorted = useMemo(
    () => users.sort((a, b) => a.name.localeCompare(b.name)),
    [users]
  )
  return <div>{sorted.map(renderUser)}</div>
}

Correct (creates new array):

function UserList({ users }: { users: User[] }) {
  // Creates new sorted array, original unchanged
  const sorted = useMemo(
    () => users.toSorted((a, b) => a.name.localeCompare(b.name)),
    [users]
  )
  return <div>{sorted.map(renderUser)}</div>
}

Why this matters in React:

  1. Props/state mutations break React’s immutability model – React expects props and state to be treated as read-only
  2. Causes stale closure bugs – Mutating arrays inside closures (callbacks, effects) can lead to unexpected behavior

Browser support (fallback for older browsers):

.toSorted() is available in all modern browsers (Chrome 110+, Safari 16+, Firefox 115+, Node.js 20+). For older environments, use spread operator:

// Fallback for older browsers
const sorted = [...items].sort((a, b) => a.value - b.value)

Other immutable array methods:

  • .toSorted() – immutable sort
  • .toReversed() – immutable reverse
  • .toSpliced() – immutable splice
  • .with() – immutable element replacement