无法在 Joy UI CssVarsProvider 包装器中使用 MUI X 日期选择器组件

问题描述 投票:0回答:1

每当我尝试在任何组件中使用 DatePicker 组件时都会出现崩溃错误。 Date Picker Error

package.json

  "dependencies": {
    "@emotion/react": "^11.11.4",
    "@emotion/styled": "^11.11.5",
    "@hookform/resolvers": "^3.6.0",
    "@mui/icons-material": "^5.16.1",
    "@mui/joy": "^5.0.0-beta.36",
    "@mui/material": "^5.16.4",
    "@mui/x-date-pickers": "^7.10.0",
    "date-fns": "^3.6.0",
    "dayjs": "^1.11.11",
    "react": "^18.3.1",
    "react-dom": "^18.3.1",
    "react-hook-form": "^7.52.0",
    "react-router-dom": "^6.24.1",
    "react-scripts": "^5.0.1",
    "typescript": "^5.5.3",
    "web-vitals": "^2.1.4"
  },

结果使用

CssVarsProvider
包装器会导致它崩溃。

App.js

export default function App () {
  return (
    <CssVarsProvider disableTransitionOnChange>
      <CssBaseline />
      <Router>
        <Box sx={{ display: 'flex', minHeight: '100dvh' }}>
          <Header />
          <Sidebar />
          <Routes>
            <Route path="/" element={<Navigate to="/listing" replace />} />
            <Route path="/home" element={<MainContent title="Home"><Development /></MainContent>} />
            <Route path="/dashboard" element={<MainContent title="Dashboard"><Development /></MainContent>} />
            <Route path="/listing" element={<MainContent title="Listing"><OrderTable /></MainContent>} />
            <Route path="/users" element={<MainContent title="Users"><Users /></MainContent>} />
          </Routes>
        </Box>
      </Router>
    </CssVarsProvider>
  );
}

CreateUser.tsx
父组件

const CreateUser: React.FC<UserModalProps> = () => {
//... other code
<Modal>
   <Sheet>
{
  fields.map(({ name, label, placeholder, type }) => (
    <FormControl key={name} sx={{ mb: 1 }}>
      <FormLabel sx={{ marginBottom: "4px" }}>{label}</FormLabel>
      // ....other code
      {type == "date" && <CustomDatePicker label="Choose a date" onDateChange={handleDateChange} />}
      //... other code
    </FormControl>
  ));
}
//... other code
  </Sheet>
</Modal>
}
 

我已将其导入到模式中的父组件中。

CustomDatePicker.tsx

import React, { useState } from 'react';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Button, Modal, Box, Typography } from '@mui/material';
import { Dayjs } from 'dayjs';

interface CustomDatePickerProps {
  label?: string;
  onDateChange?: (date: Dayjs | null) => void;
}

const CustomDatePicker: React.FC<CustomDatePickerProps> = ({
  label = 'Select Date',
  onDateChange,
}) => {
//... other code
  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
        <Box
        >
          <Typography variant="h6" component="h2" sx={{ mb: 2 }}>
            {label}
          </Typography>
          <DatePicker
            label={label}
            value={selectedDate}
            onChange={handleDateChange}
            sx={{ width: '100%', mb: 2 }}
          />
        </Box>
    </LocalizationProvider>
  );
};

export default CustomDatePicker;

我期待它能显示像这里

所示的视图
reactjs material-ui datepicker mui-x mui-x-date-picker
1个回答
0
投票

使用Joy UI input

解决了这个问题

解决方案是使用

Experimental_CssVarsProvider
包装器


import { Experimental_CssVarsProvider as MaterialCssVarsProvider } from '@mui/material/styles';
import { extendTheme as extendJoyTheme, THEME_ID } from '@mui/joy/styles';
const joyTheme = extendJoyTheme();

 export default function App () {
  return (
    <MaterialCssVarsProvider>
      <CssVarsProvider theme={{ [THEME_ID]: joyTheme }}>
        <CssBaseline />
        <Router>
          <Box sx={{ display: 'flex', minHeight: '100dvh' }}>
            <Header />
            <Sidebar />
            <Routes>
              <Route path="/" element={<Navigate to="/listing" replace />} />
              <Route path="/home" element={<MainContent title="Home"><Development /></MainContent>} />
              <Route path="/dashboard" element={<MainContent title="Dashboard"><Development /></MainContent>} />
              <Route path="/listing" element={<MainContent title="Listing"><OrderTable /></MainContent>} />
              <Route path="/users" element={<MainContent title="Users"><Users /></MainContent>} />
            </Routes>
          </Box>
        </Router>
      </CssVarsProvider>
    </MaterialCssVarsProvider>
  );
}

参考链接 - Github

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.