我真的是 React 的新手,我正在努力解决在我看来是一个简单的问题。这是我构建的组件的图片。
我试图完成的事情似乎微不足道,但实际上我读过的每一篇解释该怎么做的文章都告诉了我一些不同的东西,而且没有一个解决方案有效。它分解为:当用户单击标签时,它会构建一个托盘并循环遍历一系列颜色以构建颜色按钮。单击颜色按钮时,它需要将单击的颜色传递给其父组件并运行一个函数来更新其颜色。我读过有关通量、事件冒泡、将“this”绑定到属性的信息,但这些解决方案似乎都不起作用。 React 文档对于像我这样的新手来说基本上没用。我现在想避免像 flux 这样复杂的事件结构,因为我将一些简单的组件附加到我最初没有用 React 编写的现有应用程序。
另外,PS,这段代码在 JSX 中,这对我来说比直接的 JS 反应更有意义。在此先感谢您的帮助!
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>
)
}
})
原文由 Chris Patty 发布,翻译遵循 CC BY-SA 4.0 许可协议
回调函数应该工作。正如您在之前的评论中提到的,您可以使用捕获的
this
从孩子访问updateColor
函数:或者正如 Bogdan 提到的,您可以在回调函数之后通过 map 传递它:
然后,您的
<ColorButton />
组件应该能够运行一个简单的 onClick 函数:然后您可以简单地使用父组件中的普通事件目标来捕获被单击按钮的颜色:
这里有一个完整的 DEMO 来演示。