'ds' не определено

У меня есть несколько элементов DIV, которые я делаю доступными для выбора с помощью библиотеки DRAGSELECT. В компонентеDidMount,

componentDidMount() {
      var ds = new DragSelect({
    selectables: document.getElementsByClassName('ele-select'),
    area: document.getElementById('canvas'),
    onElementSelect: (element) => {
      var idArray = [];
      idArray.push(ds.getSelection())
     this.check(idArray)
    }
  })
    $('.text').draggable({
      cursor: 'move'
    })

    $('#canvas').on('mousedown', '.main-container',  (e) => {
      if ($(e.target).attr('class').indexOf('main-container') > -1) {
        this.unwrapAll()
        ds.start()
      } else {
        //idArray = []
        ds.stop();
        ds.break();
      }
    })
    $('#canvas').on('mouseup', function (e) {
      //idArray = []
      ds.stop();
      ds.start()
    })
  }

Это приводит к ошибке: «ds» не определен no-undef

Однако я исправил ошибку, используя - /* eslint no-undef: 0 */ // --> OFF в верхней части компонента.

Теперь, когда я пытаюсь добавить новый элемент и сделать его доступным для выбора, он выдает: ReferenceError: ds не определен.

Я уверен, что это связано с областью действия переменной, поскольку var имеет функциональную область. Но где я должен объявить об этом тогда? даже пробовал внутри конструктора, но, похоже, не работает.

import React, { Component } from 'react';
import './App.css';
import $ from 'jquery'
import 'jquery-ui/ui/widgets/draggable';
import DragSelect from 'dragselect';
import Button from './components/Button/Button'

/* eslint no-undef: 0 */ // --> OFF
class App extends Component {
 state = {
   btn: ['Add Element', 'Wrap', 'Unwrap']
 }
  componentDidMount() {
      var ds = new DragSelect({
    selectables: document.getElementsByClassName('ele-select'),
    area: document.getElementById('canvas'),
    onElementSelect: (element) => {
      var idArray = [];
      idArray.push(ds.getSelection())
     this.check(idArray)
    }
  })
    $('.text').draggable({
      cursor: 'move'
    })

    $('#canvas').on('mousedown', '.main-container',  (e) => {
      if ($(e.target).attr('class').indexOf('main-container') > -1) {
        this.unwrapAll()
        ds.start()
      } else {
        //idArray = []
        ds.stop();
        ds.break();
      }
    })
    $('#canvas').on('mouseup', function (e) {
      //idArray = []
      ds.stop();
      ds.start()
    })
  }


clickHandler = (val) => {
if (val === 'Add Element'){
  this.addElement();
}
}
addElement = () => {
  var x = $('.text:last')
  var top = parseFloat(x.css('top').slice(0, -2))
  x = x.attr('id').slice(-1)
  $('.main-container').append("<div class='text ele-select'>" +Math.random()+ "</div>")
  $('.text:last').attr('id', 'text' + (++x))
  $('.text:last').css({
      'top': top + 27
  })
  $('.text:last').draggable({
      cursor: 'move'
  })
 ds.addSelectables(document.getElementsByClassName('ele-select'));
}
  render() {
    var button = this.state.btn.map((element,i) => {
      return <Button value = {element} clicked = {() => this.clickHandler(element)} key = {i + element}/>
    })
    return (
      <div>
       {button}
      <div id='canvas'>
        <div className = "main-container">
          <div className = "text ele-select" id='text1' draggable = "true">Some text</div>
          <div className = "text ele-select" id='text2' draggable = "true">Another text</div>
        </div>
      </div>
      </div>
    );
  }
}


export default App;

Если ds используется только внутри класса, вы можете определить член класса — даже объявить его закрытым, если он используется только там. class App extends Component { private ds: DragSelect; ...

Randy Casburn 12.03.2019 06:36

@RandyCasburn, не могли бы вы рассказать об этом немного !!

Adarsh 12.03.2019 06:42

Разместите свое приложение на игровой площадке React или в другом месте, где есть работающее решение, и я буду рад помочь.

Randy Casburn 12.03.2019 06:57

Проблема, с которой вы столкнулись, заключается в том, что ds определено только внутри componentDidMount. Возможно, вы захотите узнать, как работает var. ссылка **проще было бы заменить var ds = на this.ds = . **

Balavishnu V J 12.03.2019 07:07

также я бы настоятельно не рекомендовал использовать jquery с реакцией.

Balavishnu V J 12.03.2019 07:11

@RandyCasburn Используйте это - codeandbox.io/s/zlopqq9x7m

Adarsh 12.03.2019 07:25

@BalavishnuVJ не работает

Adarsh 12.03.2019 07:25

@Adarsh, проверил твой кодовый ящик. Выдает ошибку перекрестного происхождения.

Balavishnu V J 12.03.2019 07:31

@BalavishnuVJ вы можете включить CORS через расширение Chrome

Adarsh 12.03.2019 07:34

проблема не была не с cors. У вас сервер serviceWorker не определен, так как вы закомментировали импорт.

Balavishnu V J 12.03.2019 07:40

также после замены на var ds = with this.ds = вы изменили все случаи появления ds на this.ds?

Balavishnu V J 12.03.2019 07:41

@BalavishnuVJ Изменился вообще

Adarsh 12.03.2019 07:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
12
540
0

Другие вопросы по теме