gpt4 book ai didi

reactjs - 如何在 react 中访问共享组件中的 Material 主题?

转载 作者:行者123 更新时间:2023-12-05 06:10:02 25 4
gpt4 key购买 nike

我有两个 React 项目,Parent 项目和 Common 项目(包含页眉、页脚等通用组件)

我在 Parent 中定义了 Material 主题,并使用 MuiThemeProvider 以标准方式配置。

但是,这个主题对象在 Parent 中定义的组件中可用,但在共享项目公共(public)中不可用。

欢迎提出建议。

2020 年 10 月 30 日在下方添加了更多详细信息

父组件

import React from "react";
import "./App.css";
import { BrowserRouter, Switch, Route } from "react-router-dom";
import themeDefault from "./CustomTheme.js";
import { MuiThemeProvider } from "@material-ui/core/styles";
import { createMuiTheme } from "@material-ui/core/styles";
import Dashboard from "./containers/Dashboard/Dashboard";
import { Footer, Header } from "my-common-react-project";

function App() {
const routes = () => {
return (
<BrowserRouter>
<Switch>
<Route exact path="/" component={Dashboard} />
</Switch>
</BrowserRouter>
);
};
return (
<MuiThemeProvider theme={createMuiTheme(themeDefault)}>
<div className="App">
<Header
logo="some-logo"
userEmail={"test@email"}
/>
... app components here..
<Footer />
</div>
</MuiThemeProvider>
);
}

export default App;

共享组件

import React from "react";
import {
Box,
AppBar,
Toolbar,
Typography,
} from "@material-ui/core/";

import styles from "./Header.styles";
import PropTypes from "prop-types";

const Header = (props) => {
const classes = styles();
const { options, history } = props;
const [anchorEl, setAnchorEl] = React.useState(null);
const handleCloseMenu = () => {
setAnchorEl(null);
};

const goto = (url) => {
history.push(url);
};
return (
<Box component="nav" className={classes.headerBox}>
<AppBar position="static" className={classes.headerPart}>
<Toolbar className={classes.toolBar}>
{localStorage && localStorage.getItem("isLoggedIn") && (
<>
{options &&
options.map((option) => (
<Typography
key={option.url}
variant="subtitle1"
className={classes.headerLinks}
onClick={() => goto(option.url)}
>
{option.name}
</Typography>
))}
</>
)}
</Toolbar>
</AppBar>
</Box>
);
};

Header.propTypes = {
options: PropTypes.array
};
export default Header;

共享组件样式

import { makeStyles } from "@material-ui/core/styles";

export default makeStyles((theme) => ({
headerPart: {
background: "white",
boxShadow: "0px 4px 15px #00000029",
opacity: 1,
background: `8px solid ${theme.palette.primary.main}`
borderTop: `8px solid ${theme.palette.primary.main}`
}
}));

Parent 组件将 theme.palette.primary.main 定义为红色,我希望在 Header 中应用相同的颜色,但它正在选择具有 的不同主题(默认)对象theme.palette.primary.main blue.

这导致我的标题为蓝色,但正文为阅读颜色。

有关如何配置此主题对象的任何建议,以便标题也从父主题对象中选择 theme.palette.primary.main

最佳答案

这里是mui V5的答案

import { useTheme } from '@mui/material/styles' // /!\ I fixed a typo from official doc here

function DeepChild() {
const theme = useTheme();
return <span>{`spacing ${theme.spacing}`}</span>;
}

取自mui documentation

关于reactjs - 如何在 react 中访问共享组件中的 Material 主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64588279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com