Ho creato uno color picker con React e Canvas. Attualmente i componenti sono renderizzati in React e canvas è fatto con vanilla javascript. Vorrei che ne avessi due in più, quindi voglio che gli eventi click vengano gestiti con React.Come accedere al contesto della tela in React
Ad esempio, questo
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();
}
Mi auguro sarebbe in grado di tradurre in questo
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>
);
}
});
Ma questo non funziona perché non so come accedere context
. Come posso accedere alle proprietà del canvas con React? C'è un modo per accedervi prima del clic?
UPDATE
ho usato la risposta di David, ma mi è stato sempre errori mettendo una funzione in ref
così ho fatto ref="canvasBlock"
e ref="canvasStrip"
invece e poi assegnato il contesto in componentDidMount
Ho creato un progetto simile https://github.com/gibbok/react-color-picker-palette è possibile visualizzare come accedere al contesto in questo esempio per la funzione getDrawingContex() {: https: // github. com/gibbok/react-color-picker-palette/blob/master/ColorPickerPalette.jsx – GibboK
nella funzione di David devi aggiungere "if (c == null)" Immagino perché ottieni il riferimento all'elemento solo una volta sul monte , non sui rerender. – Aus