JSFiddle - React, Tailwind, and code Playground

JavaScript

var canvas, ctx;

var draw = false,
    pos = [];

function init() {
    canvas = document.createElement("canvas");
    canvas.width = 600;
    canvas.height = 500;

    ctx = canvas.getContext("2d");
    document.body.appendChild(canvas);



    setInterval(function() {
        update();
        render();
    }, 1000/60);

 }

 function update() {

 }

 function render() {
      //ctx.clearRect(0, 0, canvas.width, canvas.height);
      Drawing();
 }

 document.addEventListener("mousedown", OnMouseDown, false);
 document.addEventListener("mousemove", OnMouseMove, false);
 document.addEventListener("mouseup", OnMouseUp, false);
 document.addEventListener("touchstart", OnMouseDown, false);
 document.addEventListener("touchmove",  OnMouseMove, false);
 document.addEventListener("touchend",   OnMouseUp, false);

 function OnMouseDown(e) {
    var m = getMouse(e);

    pos.push({
      x: m.x,
      y: m.y
    });

    draw = true;
 }

 function OnMouseMove(e) {
  var m = getMouse(e);

  if(draw) 
    pos.push({
    x: m.x,
    y: m.y
  });
 }

 function OnMouseUp(e) {
   draw = false;
    pos = [];
 }

function getMouse(e) {
   var mx, my;
   var el = document.getElementsByTagName("canvas")[0]; 
   //проверяем мышка или тач 
   if((e.pageX == undefined && e.pageY == undefined) ||(e.clientX == undefined && e.clientY == undefined)){
        var touches = e.changedTouches;
        if(touches == undefined || touches.length > 1)
            return false;
        mx = (touches[0].pageX || touches[0].clientX) - el.getBoundingClientRect().left;
        my = (touches[0].pageY || touches[0].clientY) - el.getBoundingClientRect().top;
   }else{
        mx = (e.cleintX || e.pageX) - el.getBoundingClientRect().left;
        my = (e.clientY || e.pageY) - el.getBoundingClientRect().top;
   }
   return {x: mx,y: my};
}

function Drawing() {
    ctx.lineCap = "round";
    ctx.lineWidth = 7;
    ctx.lineJoin = "round";

    for(var i = 1; i < pos.length; i++) {
       ctx.beginPath();
...