[英]Change child <div> style under a React Component
使用像这样的React组件
const teststyle={color:red}
class Test extends React.Component {
render() {
<ParentComponent
mainContent={
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>}
>
</ParentComponent>
}
}
<ParentComponent>
将自动为props: maincontent
生成一个<div>
标签。 所以最终的渲染结果是……
<ParentComponent>
<div class="testtest">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</div>
</ParentComponent>
我在</ParentComponent>
内部定义了一种测试样式
单击列表项时,我试图更改<div>
CSS样式。 如何在<ParentComponent>
文件中获取div dom
并对其应用样式?
谢谢!
我不确定是否能得到您想要的东西,但是...不建议您使用React访问DOM元素。 如果要更改div的样式,请改用一个事件,例如每个元素的onClick,并且该事件必须更改div的当前样式。
如果组件自动生成,则其道具也可以生成,您可以在其中将样式设置为<div style={this.styleChanger}></div>
,然后按照以下步骤进行操作
创建这样的状态
state = {
styleChange: true
}
然后执行如下所示的功能。 我知道这看起来很丑,但这是演示
clicker = () => {
if (this.state.change) {
this.setState({
styleChange: false
});
return {
backgroundColor: "red"
};
} else {
this.setState({
styleChange: true
});
return;
}
};
在这里调用函数onClick并将函数设置为样式,它将自动执行
<ParentComponent>
<div style={this.styleChanger}>
<ul>
<li onClick={this.clicker}>1</li>
<li>2</li>
<li>3</li>
</ul>
</div>
</ParentComponent>
会自动为props生成一个标签:
maincontent
仅当在ParentComponent
内部有一个div
包围时才会发生这种情况
<div>
{this.props.children}
</div>
如果是这种情况,则应使用React.Fragment
<Fragment>
{this.props.children}
</Fragment>
要么
<>
{this.props.children}
</>
因此,只需将ParentComponent
更改为使用Fragment并以所需的样式添加自己的div元素。
<ParentComponent>
<div style={this.styleChanger}>
<ul>
<li onClick={this.clicker}>1</li>
<li>2</li>
<li>3</li>
</ul>
</div>
</ParentComponent>
如果您无法控制上级组件,建议您按照以下步骤操作
.component-wrapper--单击> div {...}
<div className={`component-wrapper component-wrapper--${this.state.isClicked ? 'clicked': ''}`}>
<ParentComponent
mainContent={
<ul>
<li onClick={() => this.setState({isClicked: true})}>1</li>
</ul>
}
/>;
</div>
尝试dangerouslySetInnerHTML
地使用dangerouslySetInnerHTML
。 在您的情况下,请创建以下内容:
const createMainContent = () => {
return {
__html: '<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>'
};
然后将其传递给您的<div />
:
<div dangerouslySetInnerHTML={createMainContent()} />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.