我使用React和Canvas制作了一个颜色选择器。目前,组件在React中呈现,而canvas则是使用原始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中获取画布属性?是否有一种方法可以在点击之前访问它?
更新
我使用了David的答案,但是将函数放在ref
中会出现错误,所以我改成了ref="canvasBlock"
和ref="canvasStrip"
,然后在componentDidMount
中分配了context
。