【发布时间】:2017-06-08 03:17:12
【问题描述】:
我有一个反应组件,我试图在单击 div 时更改 css 的背景颜色。
我知道你可以在组件中设置颜色,但是我多次使用这个组件,并且不要用不同的颜色制作多个组件文件,即使我这样做了,除了事实之外我很好奇.
我怎样才能通过组件访问(甚至是console.log来自己弄清楚)css文件及其属性?提前谢谢。
【问题讨论】:
我有一个反应组件,我试图在单击 div 时更改 css 的背景颜色。
我知道你可以在组件中设置颜色,但是我多次使用这个组件,并且不要用不同的颜色制作多个组件文件,即使我这样做了,除了事实之外我很好奇.
我怎样才能通过组件访问(甚至是console.log来自己弄清楚)css文件及其属性?提前谢谢。
【问题讨论】:
如果您想在 .css/.scss 文件中保留所有背景颜色样式,则需要有一个好的 className 策略来将样式链接到您的组件。这是我的建议:
styles.scss
.blue {
background-color: blue;
&.clicked {
background-color: red;
}
}
Container.js
import React from 'react';
import ClickableDiv from './ClickableDiv.js';
const Container = () => (
<ClickableDiv className="blue">
<p>This is my text.</p>
</ClickableDiv>
);
export default Container;
ClickableDiv.js
import React, { Component } from 'react';
class ClickableDiv extends Component {
constructor() {
super();
this.state = { clicked: false };
this.handleDivClick = this.handleDivClick.bind(this);
}
handleDivClick() {
this.setState({ clicked: true });
}
render() {
const divClassName = [this.props.classname];
if (this.state.clicked) divClassName.push('clicked');
return (
<div className={divClassName.join(' ').trim()} onClick={this.handleDivClick}>
{this.props.children}
</div>
);
}
}
export default ClickableDiv;
未点击:
<div class="blue"><p>This is my text.</p></div>
点击:
<div class="blue clicked"><p>This is my text.</p></div>
【讨论】:
您可以将所需的背景颜色作为道具传递,并通过 onClick 处理程序使用内部状态。
Container.js
import React from 'react';
import ClickableDiv from './ClickableDiv';
const Container = () => (
<ClickableDiv backgroundColor="#FF0000">
<p>This is my text.</p>
</ClickableDiv>
);
export default Container;
ClickableDiv.js
import React, { Component } from 'react';
class ClickableDiv extends Component {
constructor() {
super();
this.state = {};
this.handleDivClick = this.handleDivClick.bind(this);
}
handleDivClick() {
const { backgroundColor } = this.props;
if (backgroundColor) this.setState({ backgroundColor });
}
render() {
const { backgroundColor } = this.state;
return (
<div style={{ backgroundColor }} onClick={this.handleDivClick}>
{this.props.children}
</div>
);
}
}
export default ClickableDiv;
【讨论】:
最好制作一个外部 css 文件并将 css 代码写入该文件,然后将其导入 index.html
【讨论】: