gpt4 book ai didi

css - 使用 withStyles api 时,如何允许通过 props 自定义 React 组件的样式?

转载 作者:行者123 更新时间:2023-11-28 13:55:13 25 4
gpt4 key购买 nike

我正在为我们的 React(使用 MaterialUI)应用程序编写一些简单的可重用组件。

问题是,我想允许这个相同的可重用组件的不同样式,由消费组件通过 Prop 定制。

这是部分代码:

import { withStyles } from '@material-ui/core';

const styles = theme => ({
image: {
maxHeight: '200px'
}
});

render() {
const classes = this.props.classes
return (
<div>
...
<img className={classes.image} src={this.state.filePreviewSrc} alt="" />
...
</div>
);
}

比方说,我想让程序员自定义 classes.image 的外观。硬编码的图像类能否以某种方式被覆盖?

使用 withStyles api 甚至是创建组件的正确方法吗?其外观可以由使用组件/程序员自定义?

最佳答案

对于如何支持样式自定义,主要有三种方法:

  1. 在您的风格中利用 Prop
  2. 利用 Prop 来确定是否应应用某些类
  3. 通过 withStyles 进行定制

对于选项3,包装组件的样式将与原始样式合并,但包装组件的CSS 类将在<head> 中稍后出现。并将赢得原作。

下面是显示所有三种方法的示例:

ReusableComponent.js

import React from "react";
import { withStyles } from "@material-ui/core/styles";

const styles = {
root: props => ({
backgroundColor: props.rootBackgroundColor
? props.rootBackgroundColor
: "green"
}),
inner: props => ({
backgroundColor: props.innerBackgroundColor
? props.innerBackgroundColor
: "red"
})
};

const ReusableComponent = ({ classes, children, suppressInnerDiv = false }) => {
return (
<div className={classes.root}>
Outer div
{suppressInnerDiv && <div>{children}</div>}
{!suppressInnerDiv && (
<div className={classes.inner}>
Inner div
<div>{children}</div>
</div>
)}
</div>
);
};
export default withStyles(styles)(ReusableComponent);

index.js

import React from "react";
import ReactDOM from "react-dom";
import { withStyles } from "@material-ui/core/styles";

import ReusableComponent from "./ReusableComponent";

const styles1 = theme => ({
root: {
backgroundColor: "lightblue",
margin: theme.spacing(2)
},
inner: {
minHeight: 100,
backgroundColor: "yellow"
}
});
const Customization1 = withStyles(styles1)(ReusableComponent);

const styles2 = {
inner: {
backgroundColor: "purple",
color: "white"
}
};
const Customization2 = withStyles(styles2)(ReusableComponent);

function App() {
return (
<div className="App">
<ReusableComponent>Not customized</ReusableComponent>
<Customization1>Customization 1 via withStyles</Customization1>
<Customization2>Customization 2 via withStyles</Customization2>
<ReusableComponent rootBackgroundColor="lightgrey" suppressInnerDiv>
Customization via props
</ReusableComponent>
</div>
);
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

Edit styling reusable component

关于css - 使用 withStyles api 时,如何允许通过 props 自定义 React 组件的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58732498/

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