用途:这是一条 JavaScript/React 编码规范,要求在排序数组时使用 toSorted() 而不是 sort(),以避免修改原数组。当被排序的数组是 React 的 props、state,或者在其他地方被引用、共享时,都应应用该规范。
主要能力与原因:sort() 会原地修改数组,可能引发与 React state 和 props 相关的缺陷。toSorted() 会返回一个新的已排序数组,原数组保持不变。资料指出,原地修改 props/state 会破坏 React 的不可变模型(React 期望 props 和 state 被当作只读),并且在回调、effect 等闭包中修改数组可能导致过期闭包(stale closure)等异常行为。
使用方式:错误写法是在 useMemo 中直接调用 users.sort(...),会修改 users 这个 prop 数组;正确写法是调用 users.toSorted(...),生成新的已排序数组,原数组不变。
兼容性:toSorted() 在所有现代浏览器中可用(Chrome 110+、Safari 16+、Firefox 115+、Node.js 20+)。对于较旧环境,可使用展开运算符作为回退:const sorted = [...items].sort((a, b) => a.value - b.value)。
相关不可变数组方法:toSorted()(不可变排序)、toReversed()(不可变反转)、toSpliced()(不可变 splice)、with()(不可变元素替换)。
限制:资料未提供官方文档链接、安装命令、版本要求以外的其他信息,也未说明与具体框架或构建工具的集成方式。