我用 React 和 Canvas 做了一个 颜色选择器。目前,组件是在 React 中呈现的,而画布是使用 vanilla javascript 完成的。我想要两个网格更多,所以我希望用 React 处理点击事件。
例如,这个
colorStrip.addEventListener("click", click, false);
function click(e) {
x = e.offsetX;
y = e.offsetY;
var imageData = context.getImageData(x, y, 1, 1).data;
rgbaColor = 'rgba(' + imageData[0] + ',' + imageData[1] + ',' + imageData[2] + ',1)';
fillGradient();
}
我希望能够翻译成这个
var ColorPicker = React.createClass({
colorStripClick: function() {
//handle click events here
},
render: function() {
var styles = {
opacity: this.props.isVisible ? '1' : '0'
};
return(
<div id="color-picker" style={styles}>
<canvas id="color-block" height="150" width="150"></canvas>
<canvas id="color-strip" height="150" width="30" onClick={this.colorStripClick}></canvas>
</div>
);
}
});
但这不起作用,因为我不知道如何访问 context
。如何使用 React 访问画布属性?有没有办法在点击之前访问它?
更新
I used David’s answer but I was getting errors by putting a function in ref
so I did ref="canvasBlock"
and ref="canvasStrip"
instead and then assigned the context in componentDidMount
原文由 cocoa 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以在
ref
canvas
函数属性:然后您将可以通过
this.context
访问上下文:正如已经指出的那样,您还可以使用事件对象访问 DOM 节点,但这样您就可以从任何地方进行访问,而不仅仅是事件处理程序。