JSFiddle - React, Tailwind, and code Playground

HTML

<script src="//cdn.rawgit.com/mrdoob/three.js/master/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script>
THREE.DragControls = function ( _objects, _camera, _domElement ) {

	var _plane = new THREE.Plane();
	var _raycaster = new THREE.Raycaster();

	var _mouse = new THREE.Vector2();
	var _offset = new THREE.Vector3();
	var _intersection = new THREE.Vector3();
	var _worldPosition = new THREE.Vector3();
	var _inverseMatrix = new THREE.Matrix4();
	var _intersections = [];

	var _selected = null, _hovered = null;

	//

	var scope = this;

	function activate() {

		_domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );
		_domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );
		_domElement.addEventListener( 'mouseup', onDocumentMouseCancel, false );
		_domElement.addEventListener( 'mouseleave', onDocumentMouseCancel, false );
		_domElement.addEventListener( 'touchmove', onDocumentTouchMove, false );
		_domElement.addEventListener( 'touchstart', onDocumentTouchStart, false );
		_domElement.addEventListener( 'touchend', onDocumentTouchEnd, false );

	}

	function deactivate() {

		_domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );
		_domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );
		_domElement.removeEventListener( 'mouseup', onDocumentMouseCancel, false );
		_domElement.removeEventListener( 'mouseleave', onDocumentMouseCancel, false );
		_domElement.removeEventListener( 'touchmove', onDocumentTouchMove, false );
		_domElement.removeEventListener( 'touchstart', onDocumentTouchStart, false );
		_domElement.removeEventListener( 'touchend', onDocumentTouchEnd, false );

	}

	function dispose() {

		deactivate();

	}

	function onDocumentMouseMove( event ) {

		event.preventDefault();

		var rect = _domElement.getBoundingClientRect();

		_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;
		_mouse.y = - ( (...

CSS

body { margin: 0 }
canvas { display: block }

JavaScript

var camera, scene, renderer, controls;
var cubes = [];
var drag_obj =[];
var links = [];
var dragControls;

scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(1, 1, 1).setLength(15);
camera.lookAt(scene.position);

renderer = new THREE.WebGLRenderer({
  antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
controls = new THREE.OrbitControls(camera, renderer.domElement);
var plane = new THREE.GridHelper(10,20);
scene.add(plane);

var cube1 = createCube("red");
var cube2 = createCube("green");
var cube3 = createCube("blue");
//scene.matrixAutoupdate = false;
init();
animate();

function init() {
  dragControls = new THREE.DragControls(drag_obj, camera, renderer.domElement);
  dragControls.transformRoot = true;
  dragControls.addEventListener('dragstart', function(event) {
    controls.enabled = false;
  });
  dragControls.addEventListener('dragend', function(event) {
    controls.enabled = true;
  });

}
function createCube(color) {
  var cubegeom = new THREE.BoxGeometry(1, 1, 1);
   var edgeGeo = new THREE.EdgesGeometry(cubegeom);
   let material = new THREE.LineBasicMaterial({
    color: color,
    linewidth: 1
});
let lines_mesh = new THREE.LineSegments(edgeGeo, material);
  var cube = new THREE.Mesh(cubegeom, new THREE.MeshBasicMaterial({
    color: color
  }));
  cube.add(lines_mesh);
  setRandomPosition(cube);
  scene.add(cube);
  cubes.push(cube);
  return cube;
}
var raycaster, mouse = { x : 0, y : 0 };
raycaster = new THREE.Raycaster();
window.addEventListener( 'mousedown', raycast, false );
var INTERSECTED;

function setRandomPosition(obj) {
  obj.position.set(Math.random() * 10 - 5, Math.random() * 10 - 5, Math.random() * 10 - 5);
}

function animate() {
  requestAnimationFrame(animate);
  render();
}


function render() {
  renderer.render(scene, camera);
}

function raycast(e) {
   ...