import React, { useState, useCallback, useMemo, useEffect } from 'react';
import { Table, Button } from '@douyinfe/semi-ui';
const Demo = props => {
console.log(props);
const [total, setTotal] = useState(406);
const [pageSize, setPageSize] = useState(props.pageSize || 10);
const [currentPage, setCurrentPage] = useState(props.currentPage || 1);
useEffect(() => {
console.log(`didUpdate`, props.pageSize, props.currentPage);
setPageSize(props.pageSize);
setCurrentPage(props.currentPage);
}, [props.pageSize, props.currentPage]);
const pagination = useMemo(() => {
console.log('pagination', pageSize, currentPage);
return {
showSizeChanger: true,
pageSize,
// currentPage,
total,
onPageChange: currentPage => setCurrentPage(currentPage),
onPageSizeChange: pageSize => setPageSize(pageSize),
};
}, [pageSize, currentPage]);
// const pagination = {
// showSizeChanger: true,
// pageSize,
// // currentPage,
// total,
// onPageChange: currentPage => setCurrentPage(currentPage),
// onPageSizeChange: pageSize => setPageSize(pageSize),
// };
const randomTotal = useCallback(() => {
setTotal(Math.ceil(Math.random() * 100) + 40);
});
const columns = useMemo(() => [
{
title: 'Name',
dataIndex: 'name',
filters: [
{
text: '名字包含"1"',
value: '1',
},
{
text: '名字包含"2"',
value: '2',
},
],
onFilter: (value, record) => record.name.indexOf(value) > -1,
sorter: (a, b) => a.name.length - b.name.length,
},
{
title: 'Age',
dataIndex: 'age',
sorter: (a, b) => (a.age - b.age > 0 ? 1 : -1),
},
{
title: 'Address',
dataIndex: 'address',
filters: [
{
text: 'London',
value: 'London',
},
{
text: 'New York',
value: 'New York',
},
],
filterMultiple: false,
onFilter: (value, record) => record.address.indexOf(value) === 0,
sorter: (a, b) => a.address.length - b.address.length,
},
]);
const data = useMemo(() => {
const data = [];
for (let i = pageSize * (currentPage - 1); i < Math.min(total, currentPage * pageSize); i++) {
data.push({
key: '' + i,
name: `Edward King ${i}`,
age: 32,
address: `London, Park Lane no. ${i}`,
});
}
return data;
}, [total]);
return (
console.log(...args)}
/>
);
};
export default function App() {
const demo = props => {
console.log(props);
const [total, setTotal] = useState(406);
// const [pageSize, setPageSize] = useState(10);
// const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(props.pageSize || 10);
const [currentPage, setCurrentPage] = useState(props.currentPage || 1);
const [pagination, setPagination] = useState({});
const [dataSource, setDataSource] = useState([]);
useEffect(() => {
setPageSize(props.pageSize);
setCurrentPage(props.currentPage);
setPagination({
pageSize: props.pageSize,
currentPage: props.currentPage,
total,
onPageChange: currentPage => setCurrentPage(currentPage),
onPageSizeChange: pageSize => setPageSize(pageSize),
showSizeChanger: true,
});
}, [props.pageSize, props.currentPage]);
useEffect(() => {
const data = [];
for (let i = pageSize * (currentPage - 1); i < Math.min(total, currentPage * pageSize); i++) {
data.push({
key: '' + i,
name: `Edward King ${i}`,
age: 32,
address: `London, Park Lane no. ${i}`,
});
}
setDataSource(data);
}, [pagination]);
// const pagination = useMemo(() => {
// console.log('pagination', pageSize, currentPage);
// return {
// showSizeChanger: true,
// pageSize,
// currentPage,
// total,
// onPageChange: currentPage => setCurrentPage(currentPage),
// onPageSizeChange: pageSize => setPageSize(pageSize),
// };
// }, [pageSize, currentPage]);
const randomTotal = useCallback(() => {
setTotal(Math.ceil(Math.random() * 100) + 40);
});
const columns = useMemo(() => [
{
title: 'Name',
dataIndex: 'name',
filters: [
{
text: '名字包含"1"',
value: '1',
},
{
text: '名字包含"2"',
value: '2',
},
],
onFilter: (value, record) => record.name.indexOf(value) > -1,
sorter: (a, b) => a.name.length - b.name.length,
},
{
title: 'Age',
dataIndex: 'age',
sorter: (a, b) => (a.age - b.age > 0 ? 1 : -1),
},
{
title: 'Address',
dataIndex: 'address',
filters: [
{
text: 'London',
value: 'London',
},
{
text: 'New York',
value: 'New York',
},
],
filterMultiple: false,
onFilter: (value, record) => record.address.indexOf(value) === 0,
sorter: (a, b) => a.address.length - b.address.length,
},
]);
// const data = useMemo(() => {
// const data = [];
// for (let i = pageSize * (currentPage - 1); i < Math.min(total, currentPage * pageSize); i++) {
// data.push({
// key: '' + i,
// name: `Edward King ${i}`,
// age: 32,
// address: `London, Park Lane no. ${i}`,
// });
// }
// return data;
// }, [total, currentPage, pageSize]);
return (
console.log(...args)}
/>
);
};
const [config, setConfig] = useState({ pageSize: 10, currentPage: 5 });
const [pageSize, setPageSize] = useState(10);
const [currentPage, setCurrentPage] = useState(1);
const onClick = () => {
const arr = [
{ pageSize: 5, currentPage: 3 },
{ pageSize: 10, currentPage: 8 },
{ pageSize: 20, currentPage: 10 },
{ pageSize: 50, currentPage: 12 },
{ pageSize: 100, currentPage: 15 },
];
const num = Math.floor(Math.random() * 10) % arr.length;
setConfig(arr[num]);
};
return (
{demo(config)}
);
}