reactjs - 我应该单击两次以获取我的页面 [反应打字稿分页]
问题描述
我正在使用 asp.net core 和 react typescript,我想paginatedEntity
从我的 API 中使用并使用它pagination
在react
. 请问有什么线索吗?
下面是代码:
import { Card, CardActionArea } from "@material-ui/core";
import { observer } from "mobx-react-lite";
import { useEffect, useState } from "react";
import { Grid, Item } from "semantic-ui-react";
import LoadingComponent from "../../app/layout/LoadingComponent";
import { PagingParams } from "../../app/stores/pagination";
import { useStore } from "../../app/stores/store";
import { makeStyles, createStyles } from '@material-ui/core/styles';
import Pagination from '@material-ui/lab/Pagination';
import React from "react";
const useStyles = makeStyles((theme) =>
createStyles({
root: {
'& > * + *': {
marginTop: theme.spacing(2),
},
},
}),
);
export default observer(function AllProduct() {
const { productStore } = useStore();
const [, setLoadingPage] = useState(false);
const classes = useStyles();
const [page, setPage] = React.useState(1);
const handleChange = (_event: React.ChangeEvent<unknown>, value: number) => {
setPage(value);
};
function handleGetPage() {
setLoadingPage(true);
productStore.setPagingParams(new PagingParams(page));
productStore.loadProducts().then(() => setLoadingPage(false));
}
useEffect(() => {
productStore.loadProducts();
}, [productStore])
if (productStore.loadingInitial) return <LoadingComponent />
return (
<Grid style={{ marginTop: '7em' }}>
<Grid.Column width='5' id='FilterHeightSide'>
</Grid.Column>
<Grid.Column width='10'>
<div className={classes.root}>
{
productStore.products.map((product: any) =>
<Grid.Column key={product.id} width='10'>
<Card>
<CardActionArea >
<Item.Group>
<Item>
<Item.Image id='MainPhotoItems' style={{ marginLeft: '1em', marginTop: '1em' }} src={product.mainPhotoUrl} />
<Item.Content>
<Item.Header style={{ marginTop: '0.5em' }}>{product.productName}</Item.Header>
<Item.Meta style={{ marginTop: '1.5em' }}>
<span id="TextPrice" className='price'>${product.priceIncTax}</span>
<span className='stay'></span>
</Item.Meta>
<Item.Description><img src={product.brandPhotoUrl} alt="brand"
id="LogoBrandItem" /></Item.Description>
</Item.Content>
</Item>
</Item.Group>
</CardActionArea>
</Card>
</Grid.Column>
)
}
<Pagination count={productStore.totalPages} onChange={handleChange} onClick=
{handleGetPage} page={page} />
</div>
</Grid.Column>
</Grid>
)
})
我正在使用 asp.net core 和 react typescript,我想paginatedEntity
从我的 API 中使用并使用它pagination
在react
. 请问有什么线索吗?
解决方案
好吧,我终于找到了解决方案:
import { Card, CardActionArea } from "@material-ui/core";
import { observer } from "mobx-react-lite";
import { useEffect, useState } from "react";
import { Grid, Item } from "semantic-ui-react";
import LoadingComponent from "../../app/layout/LoadingComponent";
import { PagingParams } from "../../app/stores/pagination";
import { useStore } from "../../app/stores/store";
import { makeStyles, createStyles } from '@material-ui/core/styles';
import Pagination from '@material-ui/lab/Pagination';
import React from "react";
const useStyles = makeStyles((theme) =>
createStyles({
root: {
'& > * + *': {
marginTop: theme.spacing(2),
},
},
}),
);
export default observer( function AllProduct(){
const {productStore }=useStore();
const [, setLoadingPage] = useState(false);
const classes = useStyles();
const [page, setPage] = React.useState(1);
const handleChange = (_event: React.ChangeEvent<unknown>, value: number) => {
setLoadingPage(true);
productStore.setPagingParams(new PagingParams(productStore.pagingParams.pageNumber=value));
productStore.loadProducts().then(()=>setPage(value)).then(() => setLoadingPage(false));
};
useEffect(()=> {
productStore.loadProducts();
},[productStore])
if(productStore.loadingInitial ) return <LoadingComponent/>
return(
<Grid style={{marginTop:'8em'}}>
<Grid.Column width='5' id='FilterHeightSide'>
</Grid.Column>
<Grid.Column width='10'>
<div className={classes.root}>
{
productStore.products.map((product:any)=>
<Grid.Column key={product.id} width='10'>
<Card>
<CardActionArea >
<Item.Group>
<Item>
<Item.Image id='MainPhotoItems' style={{marginLeft:'1em' , marginTop:'1em'}} src={product.mainPhotoUrl} />
<Item.Content>
<Item.Header style={{marginTop:'0.5em'}}>{product.productName}</Item.Header>
<Item.Meta style={{marginTop:'1.5em'}}>
<span id="TextPrice" className='price'>${product.priceIncTax}</span>
<span className='stay'></span>
</Item.Meta>
<Item.Description><img src={product.brandPhotoUrl} alt="brand" id="LogoBrandItem" /></Item.Description>
</Item.Content>
</Item>
</Item.Group>
</CardActionArea>
</Card>
</Grid.Column>
)
}
<Pagination count={productStore.totalPages} page={page} onChange={handleChange} />
</div>
</Grid.Column>
</Grid>
)
})
我希望这对其他人有帮助:)
推荐阅读
- javascript - webgl2,不能一次打印多个对象
- python - 我最近制作了一个帐户制作程序,但我不确定如何以及使用什么命令将用户的输入传输到文本文件。任何人都可以帮助我吗?
- c# - 无法从“Microsoft.AspNetCore.Hosting.IWebHostEnvironment”转换为“Microsoft.AspNetCore.Hosting.IHostingEnvironment”
- postgresql - 如何计算 Postgresql 中两个日期之间的工作日数
- python - 如何从具有相同 lem 的数字列表中的所有子行中添加同一行?
- python - 带有 Google BigQuery 的 SQLAlchemy 并将字符串重新格式化为日期
- html - 如何使用引导程序更改 .vue 文件中的背景颜色?
- sql - 将特定 AD 属性数据映射到 SQL 表
- url - 无法验证 url(出现 404 错误)但它在浏览器中工作
- java - 用于角度和肥皂网络服务的 Java 版本