React JS分页表格默认按序号列升序排序实现方法问询
解决方案
要让表格默认按#列(对应数据的position字段)升序排序,只需在渲染数据前对数组做排序处理,分两种场景处理:
场景1:getData直接返回当前页的原始数据
如果getData(current, size)是直接返回API返回的当前页未排序数据,直接在map前添加sort方法即可:
<tbody> { getData(current, size) // 按position字段升序排序 .sort((a, b) => a.position - b.position) .map((name) => { return ( <tr key={name.name}> <td>{name.position}</td> <td>{name.name}</td> <td>{name.score}</td> <td>{name.alliances}</td> <td>{name.status}</td> </tr> ) }) } </tbody>
sort((a, b) => a.position - b.position)会把数组按position从1到n的顺序排列,因为position是数字类型,直接做减法就能实现升序逻辑。
场景2:getData基于全量数据分页
如果getData是从全量数据中切割分页内容,更合理的做法是先对全量API数据排序,再做分页处理:
- 先在组件中存储全量数据状态:
const [allData, setAllData] = useState([]);
- 请求API时先排序再存入状态:
useEffect(() => { // 替换为你的实际API请求逻辑 fetch('你的API地址') .then(res => res.json()) .then(rawData => { // 对全量数据按position升序排序 const sortedData = rawData.sort((a, b) => a.position - b.position); setAllData(sortedData); }); }, []);
- 修改
getData函数,基于排序后的全量数据分页:
const getData = (current, size) => { const startIndex = (current - 1) * size; const endIndex = startIndex + size; return allData.slice(startIndex, endIndex); };
这种方式能保证所有分页的数据都按序号升序排列,避免单页排序可能出现的序号跨页混乱问题。
内容的提问来源于stack exchange,提问作者yandry santana
相关产品推荐
相关产品推荐

