Пользовательский интерфейс материала: прокрутка таблицы вверх на новой странице - PullRequest
0 голосов
/ 13 июля 2020

Я немного потерялся в этом.

Я уже пробовал много настроек с scrollTop. Позвольте мне объяснить, я использую материал Ui и их нумерацию страниц с таблицей документацией здесь , поэтому я застреваю, когда я нажимаю на следующий набор строк (или меняю страницу), я начинаю снизу. но я бы хотел начинать с начала каждой новой строки.

Если кто-нибудь может мне помочь и объяснить почему, огромное спасибо! извините, я новичок в React.

вот мой код:

function DisplayList(props) {
   var rows = [];
   const data = props.data;
   const searchData = props.searchData;
   const setHoverAddress = props.setHoverAddress;

   const classes = useStyles1();

   const [page, setPage] = useState(0);
   const [rowsPerPage, setRowsPerPage] = useState(5);

   const handleChangePage = (event, newPage) => {
       setPage(newPage);   
   };

   const handleChangeRowsPerPage = (event) => {
       setRowsPerPage(parseInt(event.target.value, 10));
       setPage(0);
   };


   data.map((result, index) => { // WARNING : slice here which limits the number of results: .slice(0, 5)
       const volulme = Math.round(result.volulme);
       const volulme2 = Math.round(result.volulme2);


       rows.push(
       <div id={index}>
           <ListItem 
           alignItems="flex-start"
           onMouseEnter={e => {
               console.log(index);
           }}
           >
               <Grid container direction="row" spacing={1}>
                   <Grid item xs={5}>

                   {/* <Stage width={150} height={150}>
                       <Layer>
                       <Shape
                           sceneFunc={(context, shape) => {
                           context.beginPath();
                           context.moveTo(20, 10);
                           context.lineTo(120, 80);
                           context.lineTo(120, 140);
                           context.lineTo(22, 140);
                           context.closePath();
                           // (!) Konva specific method, it is very important
                           context.fillStrokeShape(shape);
                           }}
                           fill="#00D2FF"
                           stroke="black"
                           strokeWidth={2}
                       />
                       </Layer>
                   </Stage> */}

                   </Grid>
                   <Grid item xs={7}>
                   <ListItemText
                   primary={
                   }
                   secondary={
                       <React.Fragment>
                       <Typography
                           component="span"
                           variant="body2"
                           display="inline"
                           color="textPrimary"
                       >
                           Solid2 : {volulme2}
                       </Typography>
                       </React.Fragment>
                   }
                   />
                   <ListItemText
                   secondary={
                       <React.Fragment>
                       <Typography
                           component="span"
                           variant="body2"
                           display="inline"
                           color="textPrimary"
                       >
                           Solid : {volulme}
                       </Typography>
                       </React.Fragment>
                   }
                   />
                   <FormControlLabel
                   control={
                       <Checkbox icon={<FavoriteBorder />} 
                       checkedIcon={<Favorite />} 
                       color="primary"
                       onClick={(e) => {
                           if (e.target.checked) {
                               addFavourite(parc_id, 1)
                           } else {
                               removeFavourite(parc_id, 1)
                           }
                       }}
                       name="checkedH" />
                   }
                       label="Enregistrer"
                   />
                   </Grid>
               </Grid>
           </ListItem>
       </div>
       )
   })


   return (
           <Table className={classes.table} aria-label="custom pagination table">
               <TableBody>
               {(rowsPerPage > 0
                   ? rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
                   : rows
               ).map((row) => (
                   <TableRow key={index}>
                       <TableCell component="th" scope="row">
                           {row}
                       </TableCell>
                   </TableRow>
               ))}
               </TableBody>
               <TableFooter>
                   <TableRow>
                       <TablePagination
                       rowsPerPageOptions={[5, 10, 25, { label: 'All', value: -1 }]}
                       colSpan={3}
                       count={rows.length}
                       rowsPerPage={rowsPerPage}
                       page={page}
                       SelectProps={{
                           inputProps: { 'aria-label': 'rows per page' },
                           native: true,
                       }}
                       onChangePage={handleChangePage}
                       onChangeRowsPerPage={handleChangeRowsPerPage}
                       ActionsComponent={TablePaginationActions}
                       />
                   </TableRow>
               </TableFooter>
           </Table>
   )
}

1 Ответ

0 голосов
/ 13 июля 2020

Я не вижу scrollTop в вашем примере, поэтому сложно точно сказать, в чем проблема. Если вы просто пытаетесь прокрутить окно, попробуйте window.scrollTo(0, 0);

https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo

Если вы пытаетесь прокрутить сам элемент таблицы, вы можете использовать ссылку

Вверх вашего компонента добавьте:

function DisplayList(props) {
   const tableRef = React.createRef();
   var rows = [];
   const data = props.data;
   ...

Добавьте ссылку в свою таблицу:

  return (
  <Table
    ref={tableRef}
    className={classes.table}
    aria-label="custom pagination table"
  >
    <TableBody>
    ...

Наконец, событие вашей страницы использует ссылку для изменения scrollTop

const handleChangePage = (event, newPage) => {
  setPage(newPage);   
  tableRef.current?.scrollTop = 0;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...