Ошибка типа: не удается прочитать свойство ‘scan’ неопределенного scanner.js

#javascript #reactjs

#javascript #reactjs

Вопрос:

Я пытаюсь интегрироваться scanner-js в свое приложение react, но получаю сообщение об ошибке TypeError: Cannot read property 'scan' of undefined .

Вы можете найти код ниже:

 import { scanner } from 'scanner-js';
class Home extends React.Component {
  constructor(props) {
    super(props);

    this.state = {};
  }

  scan = () => {
    scanner.scan(this.displayImagesOnPage, {
      output_settings: [
        {
          type: 'return-base64',
          format: 'jpg',
        },
      ],
    });
  };

  displayImagesOnPage(successful, mesg, response) {
    if (!successful) {
      // On error
      console.error('Failed: '   mesg);
      return;
    }
    if (
      successful amp;amp;
      mesg != null amp;amp;
      mesg.toLowerCase().indexOf('user cancel') >= 0
    ) {
      // User cancelled.
      console.info('User cancelled');
      return;
    }
    var scannedImages = scanner.getScannedImages(response, true, false); // returns an array of ScannedImage
    for (
      var i = 0;
      scannedImages instanceof Array amp;amp; i < scannedImages.length;
      i  
    ) {
      var scannedImage = scannedImages[i];
      var elementImg = scanner.createDomElementFromModel({
        name: 'img',
        attributes: {
          class: 'scanned',
          src: scannedImage.src,
        },
      });
    }
  }
  render() {
    return (
      <div>
        <button type="button" onClick={this.scan}>
          Scan
        </button>
      </div>
    );
  }
}

export default Home;
 

При наведении курсора мыши на scanner объект отображаются следующие данные, но я не знаю, почему он выдает неопределенную ошибку.

введите описание изображения здесь

Может кто-нибудь помочь мне найти проблему?

Заранее спасибо.

Комментарии:

1. почему `import { scanner } from 'scanner-js'` — внутри обратных ссылок? ` это просто строка, это допустимый синтаксис, но в результате ничего не происходит, точно так же, как это делается "hello world" с отдельной строкой в javascript — попробуйте import { scanner } from 'scanner-js'

2. @Bravo это ошибка при публикации вопроса

3. ну, это было бы объяснение: p

4. @Bravo вы находите здесь какие-либо проблемы?

5. Вы проверили, как экспортируется модуль?

Ответ №1:

Это потому, что вы импортируете его неправильно. Если вы проверите пакет в npm, вы увидите, что экспортируемого модуля нет, поэтому вы не можете импортировать ни один export ( import {scanner} from 'scanner-js' ), ни вы не можете импортировать export ( import scanner from 'scanner-js ) по умолчанию.

Вам нужно импортировать весь модуль только для побочных эффектов, и он добавит глобальную scanner переменную к window объекту.

 import 'scanner-js';

console.log(typeof scanner);
// => object

console.log(typeof scanner.scan);
// => function
 

Если вы используете ESLint, вам нужно добавить scanner в качестве глобальной переменной.

Ссылка на CodeSandbox: https://codesandbox.io/s/scanner-js-hcz2j

Комментарии:

1. когда я следую вашему подходу, он показывает, что сканер не определен

2. Какой из них, ваш IDE или браузер?

3. Я просто копирую приведенный выше код, вставленный в мою среду разработки

4. Я просто копирую приведенный выше код, вставленный в мою среду разработки

5. Я только что проверил это в codesandbox, и все работает нормально: codesandbox.io/s/scanner-js-hcz2j