You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Next.js+Chakra UI实现固定分页的客户列表布局问询

Next.js + Chakra UI 实现固定分页的客户列表布局思路

核心布局逻辑

利用Chakra UI的弹性布局(Flex)特性,将左侧列表区分成滚动内容区和固定分页区,同时让整体布局占满视口高度,确保分页始终停留在页面底部。

分步实现

  1. 整体页面框架
    用Flex组件作为根容器,设置height="100vh"让布局铺满整个浏览器视口,左右分栏分别承载客户列表和详情内容:

    • 左侧列表区指定固定宽度(比如w="350px"),内部用垂直弹性布局(flexDirection="column")拆分滚动内容和分页。
    • 右侧详情区设置flex="1"自动填充剩余宽度,内容过多时可单独开启滚动。
  2. 左侧列表区滚动与分页固定

    • 滚动内容区:用ScrollView(或Box加overflowY="auto")包裹列表项,设置flex="1"让它自动填充除分页外的所有剩余空间,超出部分自动滚动。
    • 分页按钮区:用Box包裹,设置flexShrink="0"防止被压缩,同时固定在列表区底部,不会随内容滚动偏移。
  3. 细节优化

    • 给滚动内容区添加pb="4"(底部内边距),避免最后一条列表项被分页按钮遮挡。
    • 右侧详情区若内容过长,可添加overflowY="auto"开启独立滚动,不影响左侧分页的固定位置。

代码示例

import { Flex, Box, ScrollView, Button, VStack } from '@chakra-ui/react';

export default function CustomerDashboard() {
  return (
    <Flex height="100vh" gap="4" p="4" bg="gray.50">
      {/* 左侧客户列表容器 */}
      <Box 
        width="350px" 
        display="flex" 
        flexDirection="column" 
        gap="2"
        bg="white"
        borderRadius="md"
        p="3"
        boxShadow="sm"
      >
        {/* 可滚动的客户列表 */}
        <ScrollView flex="1" overflowY="auto" pb="4">
          {Array.from({ length: 25 }).map((_, idx) => (
            <Box 
              key={idx} 
              p="3" 
              borderWidth="1px" 
              borderRadius="md" 
              mb="2"
              cursor="pointer"
              _hover={{ bg: 'gray.50' }}
            >
              客户 {idx + 1}
            </Box>
          ))}
        </ScrollView>

        {/* 固定在底部的分页按钮 */}
        <Box display="flex" justifyContent="space-between" flexShrink="0">
          <Button variant="outline" colorScheme="blue" disabled>上一页</Button>
          <Button variant="outline" colorScheme="blue">下一页</Button>
        </Box>
      </Box>

      {/* 右侧客户详情区 */}
      <Box 
        flex="1" 
        bg="white"
        borderRadius="md"
        p="4"
        boxShadow="sm"
        overflowY="auto"
      >
        <Box fontSize="xl" fontWeight="semibold" mb="4">客户详情</Box>
        {/* 这里渲染选中客户的具体信息 */}
        <Box p="3" borderWidth="1px" borderRadius="md">
          请选择左侧的客户查看详情
        </Box>
      </Box>
    </Flex>
  );
}

关键要点说明

  • height="100vh":确保根布局占满视口,是分页固定在页面底部的基础。
  • flex="1"(滚动区):让列表内容自动填充可用空间,超出部分滚动。
  • flexShrink="0"(分页区):强制分页保持原有高度,不会被滚动区挤压。

内容的提问来源于stack exchange,提问作者user20985280

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 08:03:22