自定义组件不接受样式 react material ui
Custom component does not accept styles react material ui
我创建了一个 Avatar Component
,它是一个显示图标和一些文本的非常基本的组件。这是组件的代码。
import React from "react";
import PropTypes from "prop-types";
import { withStyles, Avatar, Typography } from "@material-ui/core";
import avatar_placeholder from "../images/avatar_man.svg";
const styles = theme => ({
row: {
display: "flex",
flexDirection: "row",
alignItems: "center"
},
avatar: {
width: 50,
height: 50,
marginRight: "2%"
},
subtitle: {
opacity: 0.5
}
});
const customAvatar = props => {
const { classes, name, subtitle } = props;
return (
<div className={classes.row}>
<Avatar alt={name} src={avatar_placeholder} />
<div>
<Typography variant="title">{name}</Typography>
<Typography variant="body2" className={classes.subtitle}>
{subtitle}
</Typography>
</div>
</div>
);
};
customAvatar.propTypes = {
classes: PropTypes.object.isRequired,
name: PropTypes.string.isRequired,
image: PropTypes.string,
subtitle: PropTypes.string
};
customAvatar.defaultProps = {
name: "John Doe",
subtitle: ""
};
export default withStyles(styles)(customAvatar);
Avatar
组件是父组件的子组件,下面的代码是Avatar
组件在父组件中的使用方式。
import React from "react";
import PropTypes from "prop-types";
import {
withStyles,
Card,
CardContent
} from "@material-ui/core";
import AvatarProfile from "./AvatarProfile";
const styles = {
cardContent: {
},
AvatarDiv: {
backgroundColor: "red"
}
};
const ItemCardWithCheckbox = props => {
const { classes, name, subtitle } = props;
return (
<Card>
<CardContent className={classes.cardContent}>
<AvatarProfile
name={name}
subtitle={subtitle}
className={classes.AvatarDiv}
/>
</CardContent>
</Card>
);
};
ItemCardWithCheckbox.propTypes = {
classes: PropTypes.object.isRequired
};
export default withStyles(styles)(ItemCardWithCheckbox);
如您所见,我正在尝试为 Avatar
组件应用 AvatarDiv
样式,即,我希望 Avatar
组件的 backgroundColor
是红色,但这并没有发生,我正在使用 Material UI。我的猜测是样式道具没有正确传递给 Avatar
组件,或者我没有正确应用样式。
您正在将 AvatarDiv 作为 'className' 道具传递。您没有在此处应用 class,因为 AvatarDiv 是自定义组件。
<AvatarProfile
name={name}
subtitle={subtitle}
className={classes.AvatarDiv}
您必须将其作为道具传递并使用该道具在子组件中应用样式。我在 codesandbox 中做了类似的事情,我将按钮的颜色更改为橙色,并将其作为 prop 传递给子组件。请检查 - https://codesandbox.io/s/lyxz92m7nl
我使它更具可读性和智能组件,并使用单个 stlyles 组件。
这是工作代码和框:https://codesandbox.io/s/ll507vypy7
我创建了一个 Avatar Component
,它是一个显示图标和一些文本的非常基本的组件。这是组件的代码。
import React from "react";
import PropTypes from "prop-types";
import { withStyles, Avatar, Typography } from "@material-ui/core";
import avatar_placeholder from "../images/avatar_man.svg";
const styles = theme => ({
row: {
display: "flex",
flexDirection: "row",
alignItems: "center"
},
avatar: {
width: 50,
height: 50,
marginRight: "2%"
},
subtitle: {
opacity: 0.5
}
});
const customAvatar = props => {
const { classes, name, subtitle } = props;
return (
<div className={classes.row}>
<Avatar alt={name} src={avatar_placeholder} />
<div>
<Typography variant="title">{name}</Typography>
<Typography variant="body2" className={classes.subtitle}>
{subtitle}
</Typography>
</div>
</div>
);
};
customAvatar.propTypes = {
classes: PropTypes.object.isRequired,
name: PropTypes.string.isRequired,
image: PropTypes.string,
subtitle: PropTypes.string
};
customAvatar.defaultProps = {
name: "John Doe",
subtitle: ""
};
export default withStyles(styles)(customAvatar);
Avatar
组件是父组件的子组件,下面的代码是Avatar
组件在父组件中的使用方式。
import React from "react";
import PropTypes from "prop-types";
import {
withStyles,
Card,
CardContent
} from "@material-ui/core";
import AvatarProfile from "./AvatarProfile";
const styles = {
cardContent: {
},
AvatarDiv: {
backgroundColor: "red"
}
};
const ItemCardWithCheckbox = props => {
const { classes, name, subtitle } = props;
return (
<Card>
<CardContent className={classes.cardContent}>
<AvatarProfile
name={name}
subtitle={subtitle}
className={classes.AvatarDiv}
/>
</CardContent>
</Card>
);
};
ItemCardWithCheckbox.propTypes = {
classes: PropTypes.object.isRequired
};
export default withStyles(styles)(ItemCardWithCheckbox);
如您所见,我正在尝试为 Avatar
组件应用 AvatarDiv
样式,即,我希望 Avatar
组件的 backgroundColor
是红色,但这并没有发生,我正在使用 Material UI。我的猜测是样式道具没有正确传递给 Avatar
组件,或者我没有正确应用样式。
您正在将 AvatarDiv 作为 'className' 道具传递。您没有在此处应用 class,因为 AvatarDiv 是自定义组件。
<AvatarProfile
name={name}
subtitle={subtitle}
className={classes.AvatarDiv}
您必须将其作为道具传递并使用该道具在子组件中应用样式。我在 codesandbox 中做了类似的事情,我将按钮的颜色更改为橙色,并将其作为 prop 传递给子组件。请检查 - https://codesandbox.io/s/lyxz92m7nl
我使它更具可读性和智能组件,并使用单个 stlyles 组件。 这是工作代码和框:https://codesandbox.io/s/ll507vypy7