列表显示时,当数据不足pageSize时,自动补充空行JS

本文介绍了一种使用JavaScript初始化表格的方法,通过向表格中添加指定数量的行来实现。该方法可以根据每页显示的行数动态调整表格内容。



function initList(perPageSize){
//alert(perPageSize);
var listTable=document.getElementById("listTable");
var rowLength = listTable.rows.length;
//alert("rowLength"+rowLength);
if( rowLength<=perPageSize ){
for( var i=0 ; i<perPageSize-rowLength ; i++ ){
//alert("ddd");
var rowObj = listTable.insertRow();
rowObj.className="c";
for( var j=0 ; j<listTable.rows[ 0 ].cells.length ; j++ ){
//alert("xxx");
var cellObj=rowObj.insertCell();
cellObj.style.height="24";
//cellObj.innerHTML="ASDG";
}
}
}
}


当使用 Ant Design 组件进行 form 表单查询,且列表接口和分页接口的数据格式不一致,可以通过以下方法处理: ### 数据转换 在获取到接口数据后,对数据进行转换,使其符合组件的使用要求。例如,列表接口返回的数据可能包含一些多余的字段,或者字段名与 Table 组件需要的不一致,此可以对数据进行筛选和重命名。 ```jsx import React, { useState, useEffect } from 'react'; import { Form, Input, Button, Table, Space } from 'antd'; // 模拟列表接口,返回的数据格式可能与组件需要的不一致 const fetchListData = async (params) => { return new Promise((resolve) => { setTimeout(() => { resolve([ { itemId: 1, itemName: 'Item 1' }, { itemId: 2, itemName: 'Item 2' }, ]); }, 500); }); }; // 模拟分页接口,返回的数据格式可能与组件需要的不一致 const fetchPaginationData = async (params) => { return new Promise((resolve) => { setTimeout(() => { resolve({ totalCount: 10, pageSize: 10, currentPage: 1, }); }, 500); }); }; const columns = [ { title: 'ID', dataIndex: 'id', key: 'id', }, { title: 'Name', dataIndex: 'name', key: 'name', }, ]; const App = () => { const [form] = Form.useForm(); const [listData, setListData] = useState([]); const [pagination, setPagination] = useState({ total: 0, pageSize: 10, current: 1, }); const onFinish = async (values) => { const listParams = { ...values, page: pagination.current, pageSize: pagination.pageSize }; const listResult = await fetchListData(listParams); // 转换列表数据格式 const transformedListData = listResult.map(item => ({ id: item.itemId, name: item.itemName, })); setListData(transformedListData); const paginationParams = { ...values }; const paginationResult = await fetchPaginationData(paginationParams); // 转换分页数据格式 const transformedPagination = { total: paginationResult.totalCount, pageSize: paginationResult.pageSize, current: paginationResult.currentPage, }; setPagination(transformedPagination); }; const handleTableChange = async (newPagination) => { const formValues = form.getFieldsValue(); const listParams = { ...formValues, page: newPagination.current, pageSize: newPagination.pageSize }; const listResult = await fetchListData(listParams); const transformedListData = listResult.map(item => ({ id: item.itemId, name: item.itemName, })); setListData(transformedListData); const paginationParams = { ...formValues }; const paginationResult = await fetchPaginationData(paginationParams); const transformedPagination = { total: paginationResult.totalCount, pageSize: paginationResult.pageSize, current: newPagination.current, }; setPagination(transformedPagination); }; return ( <div> <Form form={form} name="searchForm" onFinish={onFinish} initialValues={{ keyword: '', }} layout="inline" > <Form.Item name="keyword" rules={[ { required: false, message: 'Please input your keyword!', }, ]} > <Input placeholder="Search keyword" /> </Form.Item> <Form.Item> <Button type="primary" htmlType="submit"> Search </Button> </Form.Item> </Form> <Table columns={columns} dataSource={listData} pagination={pagination} onChange={handleTableChange} /> </div> ); }; export default App; ``` ### 封装数据处理函数 将数据转换的逻辑封装成独立的函数,提高代码的可维护性和复用性。 ```jsx // 转换列表数据的函数 const transformListData = (listResult) => { return listResult.map(item => ({ id: item.itemId, name: item.itemName, })); }; // 转换分页数据的函数 const transformPaginationData = (paginationResult, currentPage) => { return { total: paginationResult.totalCount, pageSize: paginationResult.pageSize, current: currentPage, }; }; // 在 onFinish 和 handleTableChange 中使用封装的函数 const onFinish = async (values) => { const listParams = { ...values, page: pagination.current, pageSize: pagination.pageSize }; const listResult = await fetchListData(listParams); const transformedListData = transformListData(listResult); setListData(transformedListData); const paginationParams = { ...values }; const paginationResult = await fetchPaginationData(paginationParams); const transformedPagination = transformPaginationData(paginationResult, pagination.current); setPagination(transformedPagination); }; const handleTableChange = async (newPagination) => { const formValues = form.getFieldsValue(); const listParams = { ...formValues, page: newPagination.current, pageSize: newPagination.pageSize }; const listResult = await fetchListData(listParams); const transformedListData = transformListData(listResult); setListData(transformedListData); const paginationParams = { ...formValues }; const paginationResult = await fetchPaginationData(paginationParams); const transformedPagination = transformPaginationData(paginationResult, newPagination.current); setPagination(transformedPagination); }; ``` ### 错误处理 在数据转换过程中,可能会出现一些错误,例如数据格式不符合预期等,需要进行错误处理,避免程序崩溃。 ```jsx const transformListData = (listResult) => { try { return listResult.map(item => ({ id: item.itemId, name: item.itemName, })); } catch (error) { console.error('Error transforming list data:', error); return []; } }; const transformPaginationData = (paginationResult, currentPage) => { try { return { total: paginationResult.totalCount, pageSize: paginationResult.pageSize, current: currentPage, }; } catch (error) { console.error('Error transforming pagination data:', error); return { total: 0, pageSize: 10, current: 1, }; } }; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值