导出具有 Material-UI 主题支持的辅助函数
Export helper functions with Material-UI theme support
我想创建一个新文件,其中将包含多个使用相同逻辑的组件的辅助函数,
问题是我需要在该文件中使用我的 locale.ts
文件来根据主题(本地化)使用当前语言
但似乎我无法在 ts 文件中调用 const t: any = useTheme().props
。
(错误:React Hook "useTheme" 不能在顶层调用。React Hooks 必须在 React 函数组件或自定义 React Hook 函数中调用)
今天在我的 tsx 组件文件中:
t: any = useTheme().props
t.General.someString
如何在我的辅助函数文件中使用 Material-UI 主题的本地化?
Hook 不能在顶层使用,这是不支持的:
// top level
const any = useTheme().props;
它应该在功能组件或另一个钩子中使用。参考hook规则here:
function Component() {
// valid because it's inside a React function
const any = useTheme().props;
return (...);
}
您可以创建一个辅助挂钩,return提供您需要的特定数据:
const useThemeProps = () => {
// valid because it's inside another hook
return useTheme().props;
}
function Component() {
const any = useThemeProps();
return (...);
}
你也可以直接return数据:
function Component() {
const { props } = useTheme();
return (...);
}
这似乎对我有用
在 Utils.js 文件中
import { useTheme } from '@mui/material/styles';
import useMediaQuery from '@mui/material/useMediaQuery';
const IsMobile = () => {
return useMediaQuery(useTheme().breakpoints.down('md'));
};
export { IsMobile };
内部组件:
import { IsMobile } from 'components/utilities/Utils';
测试
console.log(IsMobile());
在 JSX 中
{IsMobile ? () : ()}
我想创建一个新文件,其中将包含多个使用相同逻辑的组件的辅助函数,
问题是我需要在该文件中使用我的 locale.ts
文件来根据主题(本地化)使用当前语言
但似乎我无法在 ts 文件中调用 const t: any = useTheme().props
。
(错误:React Hook "useTheme" 不能在顶层调用。React Hooks 必须在 React 函数组件或自定义 React Hook 函数中调用)
今天在我的 tsx 组件文件中:
t: any = useTheme().props
t.General.someString
如何在我的辅助函数文件中使用 Material-UI 主题的本地化?
Hook 不能在顶层使用,这是不支持的:
// top level
const any = useTheme().props;
它应该在功能组件或另一个钩子中使用。参考hook规则here:
function Component() {
// valid because it's inside a React function
const any = useTheme().props;
return (...);
}
您可以创建一个辅助挂钩,return提供您需要的特定数据:
const useThemeProps = () => {
// valid because it's inside another hook
return useTheme().props;
}
function Component() {
const any = useThemeProps();
return (...);
}
你也可以直接return数据:
function Component() {
const { props } = useTheme();
return (...);
}
这似乎对我有用
在 Utils.js 文件中
import { useTheme } from '@mui/material/styles';
import useMediaQuery from '@mui/material/useMediaQuery';
const IsMobile = () => {
return useMediaQuery(useTheme().breakpoints.down('md'));
};
export { IsMobile };
内部组件:
import { IsMobile } from 'components/utilities/Utils';
测试
console.log(IsMobile());
在 JSX 中
{IsMobile ? () : ()}