如何通过单击另一个按钮来更改组件的颜色。 我试图通过设置状态来做到这一点,但这是不可能的。而在此组件中,SecondAnotherBox不是属性中的样式。
var AnotherBox = React.createClass({
boxclick: function()
{
//change from here
},
render: function()
{
return(
<div onClick={this.boxclick}> anotherbox</div>)
}
});
var SecondAnotherBox = React.createClass({//change this
render: function()
{
return(
<div> secondanotherbox</div>)
}
});
var ComplexBox = React.createClass({
render: function()
{
return(
<div>
<AnotherBox />
<SecondAnotherBox />
</div>)
}
});
ReactDOM.render(
<ComplexBox />,
document.getElementById('test')
);
答案 0 :(得分:1)
你有三个组件
ComplexBox与AnotherBox和SecondAnotherbox。
在代码中看起来像这样......
var AnotherBox = React.createClass({
render: function()
{
return(
<div onClick={this.props.onBoxClick}> anotherbox</div>);
}
});
var SecondAnotherBox = React.createClass({//change this
render: function()
{
return(
<div style={{ borderColor: this.props.color }}> secondanotherbox</div>);
}
});
var ComplexBox = React.createClass({
getInitialState: function() {
return {
color: 'blue'
};
},
boxclick: function()
{
//change from here
var newColor = this.state.color == 'red'?'blue':'red';
this.setState({
color: newColor
})
},
render: function()
{
return(
<div>
<AnotherBox onBoxClick={this.boxclick} />
<SecondAnotherBox color={this.state.color} />
</div>);
}
});
ReactDOM.render(
<ComplexBox />,
document.getElementById('test')
);
答案 1 :(得分:0)
如果您愿意,可以使用+
CSS选择器执行此操作。查看pen here
我认为这非常脆弱。对DOM布局的轻微更改将破坏这一点。使用像redux这样的全局状态管理器并将这些信息作为道具传递给组件会好得多。
编辑:您仍然可以仅使用反应状态来实现此目的。 另一个pen for demo。
答案 2 :(得分:0)
为什么不尝试在容器ComplexBox上放置一个状态,如下所示:
var AnotherBox = React.createClass({
boxclick: function()
{
//change from here
},
render: function()
{
return(
<div
onClick={this.boxclick}
style={ this.props.boxClicked === 1 ? color: blue }
>
anotherbox
</div>
)
}
});
var SecondAnotherBox = React.createClass({//change this
render: function()
{
return(
<div style={ this.props.boxClicked === 2 ? color: blue }> secondanotherbox</div>)
}
});
var ComplexBox = React.createClass({
constructor: function() {
this.state: { boxClicked: 1 }
}
render: function()
{
return(
<div>
<AnotherBox
boxClicked: this.state.boxClicked
/>
<SecondAnotherBox
boxClicked: this.state.boxClicked
/>
</div>)
}
});
ReactDOM.render(
<ComplexBox />,
document.getElementById('test')
);