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

基于Material-UI Drawer替换jQuery底部抽屉组件的技术咨询

Replacing jQuery Bottom Drawer with React + Material-UI

Got it, let's walk through how to build this bottom drawer with tab navigation using React and Material-UI—ditching that old jQuery implementation will make your code way more maintainable and scalable. Here's a step-by-step approach tailored to your needs:

Core Tools to Lean On

  • Material-UI Drawer: Perfect for the bottom-slide behavior, just set anchor="bottom".
  • Material-UI Tabs & Tab: Handles the tab bar at the top of the drawer with built-in selection logic.
  • React useState: Manages drawer visibility, active tab selection, and the "slide up" height transition.

Step-by-Step Implementation

1. Set Up Imports & Initial State

First, pull in the components we need and initialize state variables to control the drawer's behavior:

import React, { useState } from 'react';
import { Drawer, Tabs, Tab, Box, Typography } from '@mui/material';

// Example content components for each tab (replace with your own)
const ProfileTab = () => <Typography variant="h6">Your Profile Content</Typography>;
const SettingsTab = () => <Typography variant="h6">Settings & Preferences</Typography>;
const NotificationsTab = () => <Typography variant="h6">Latest Notifications</Typography>;

const BottomDrawer = () => {
  const [isDrawerOpen, setIsDrawerOpen] = useState(true); // Start open, adjust as needed
  const [activeTabIndex, setActiveTabIndex] = useState(0);
  // Control drawer height: start with only tab bar visible, expand on tab click
  const [drawerHeight, setDrawerHeight] = useState("12%");

  const handleTabSwitch = (event, newTabIndex) => {
    setActiveTabIndex(newTabIndex);
    // Trigger slide-up by expanding drawer height
    setDrawerHeight("80%");
  };

  // Render the right content based on selected tab
  const renderActiveTabContent = () => {
    switch (activeTabIndex) {
      case 0:
        return <ProfileTab />;
      case 1:
        return <SettingsTab />;
      case 2:
        return <NotificationsTab />;
      default:
        return null;
    }
  };

2. Build the Drawer Structure

Now assemble the drawer with the tab bar and content area, adding smooth transitions for the slide-up effect:

return (
    <div>
      <Drawer
        anchor="bottom"
        open={isDrawerOpen}
        onClose={() => setIsDrawerOpen(false)}
        sx={{
          '& .MuiDrawer-paper': {
            height: drawerHeight,
            transition: 'height 0.3s ease-in-out', // Smooth slide animation
            borderTopLeftRadius: 16,
            borderTopRightRadius: 16,
            display: 'flex',
            flexDirection: 'column',
          },
        }}
      >
        {/* Tab Bar at the top of the drawer */}
        <Tabs
          value={activeTabIndex}
          onChange={handleTabSwitch}
          variant="fullWidth"
          sx={{ borderBottom: 1, borderColor: 'divider' }}
        >
          <Tab label="Profile" />
          <Tab label="Settings" />
          <Tab label="Notifications" />
        </Tabs>

        {/* Scrollable Content Area */}
        <Box sx={{ flexGrow: 1, padding: 3, overflowY: 'auto' }}>
          {renderActiveTabContent()}
        </Box>
      </Drawer>
    </div>
  );
};

export default BottomDrawer;

Key Customizations to Fit Your Needs

  • Slide-Up Speed: Adjust the 0.3s value in the transition property to make the animation faster or slower.
  • Initial Drawer State: If you want the drawer to start hidden (pop up on a button click), set isDrawerOpen to false and add a trigger button to toggle it.
  • Height Values: Tweak the drawerHeight percentages (e.g., "10%" for a slimmer initial tab bar, "75%" for a shorter expanded drawer) to match your design.
  • Content Reusability: Swap out the example tab components with your own React components—this structure makes it easy to add/remove tabs later.

Why This Is Better Than jQuery

  • Component-Based Logic: Each tab's content is a self-contained React component, so updates and bug fixes are way simpler.
  • No DOM Manipulation: React handles state cleanly, so you don't have to mess with jQuery's animate() or direct DOM queries.
  • Built-In Accessibility: Material-UI components come with accessibility features out of the box, which you'd have to build manually with jQuery.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:45:54