我对 React 还很陌生,我正在绞尽脑汁地试图解决一个在我看来很简单的问题。这是我构建的组件的图片。
颜色选择组件
我想要完成的事情似乎微不足道,但实际上我读过的每一篇解释要做什么的文章都告诉我一些不同的东西,而且没有一个解决方案有效。它分解为:当用户单击标签时,它会构建一个托盘并循环遍历一系列颜色以构建颜色按钮。单击颜色按钮时,它需要将单击的颜色传递给其父组件并运行函数来更新其颜色。我读过有关通量、事件冒泡、将“this”绑定到属性的内容,但这些解决方案似乎都不起作用。 React 文档对于像我这样的新手来说基本上没什么用。我现在想避免像 Flux 这样复杂的事件结构,因为我将一些简单的组件附加到我最初没有在 React 中编写的现有应用程序。
另外,PS,这段代码是在 JSX 中,这对我来说比直接的 JS React 更有意义。在此先感谢您的帮助!
var colorsArray = ["#ED5851", "#9CCC64", "#337AEC", "#ff7a45", "#7E58C2", "#FFEB3B", "#78909C", "#FFFFFF", "#213a4b"];
var EditDrawer = React.createClass({
updateColor: function() {
console.log("New Color: " + i);
},
render: function(){
var passTarget = this;
return (
<div className="container-fluid animated fadeIn extra-fast-animation tag-edit-drawer">
<div className="row">
<div className="col-xs-12">
{colorsArray.map(function(object, i){
return <ColorButton buttonColor={object} key={i} />;
})}
</div>
</div>
</div>
);
}
})
var ColorButton = React.createClass({
render: function(){
var buttonStyle = {
backgroundColor: this.props.buttonColor,
};
return (
<div className="tag-edit-color-button" style={buttonStyle} >
</div>
)
}
})
回调函数应该可以工作。正如您在之前的评论中提到的,您可以使用捕获的this
访问updateColor
子函数:
var passTarget = this;
...
...
return <ColorButton
buttonColor={object}
key={i}
update={passTarget.updateColor} />
或者正如 Bogdan 提到的,您可以在回调函数之后通过 map 传递它:
{colorsArray.map(function(object, i){
return <ColorButton
buttonColor={object}
key={i}
update={this.updateColor} />;
}, this)}
Your <ColorButton />
然后组件应该能够运行一个简单的 onClick 函数:
onClick={this.props.update}
然后您可以简单地利用父组件中的普通事件目标来捕获单击的按钮的颜色:
updateColor: function(e) {
console.log(e.target.style.backgroundColor);
}
这里有一个完整的DEMO展示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)