this не является функцией разделения кода - PullRequest
0 голосов
/ 03 сентября 2018

Я не знаю, как справиться с проблемой «этого» в моем коде. Все работало нормально, пока я не использовал разделение кода.

Я пытаюсь импортировать компонент после нажатия на кнопку. Поэтому я удалил компонент WillMount.

До разделения кода:

import React, {PureComponent} from 'react';
import Uppy from 'uppy/lib/core';

 class Shopper extends PureComponent {
    constructor (props) {
    super(props); }

   componentWillMount () {
    this.uppy2 = new Uppy({ 
      autoProceed: false,
        onBeforeUpload: (files) => {
          const updatedFiles = Object.assign({}, files)
          Object.keys(updatedFiles).forEach(fileId => {
           let origName = updatedFiles[fileId].name;
           let metaName =  updatedFiles[fileId].meta.name;
            /* some code */

            if (fileDir) {
              this.uppy2.setFileMeta(uploadId, { name: `${addBeforeName}-${metaName}.${updatedFiles[fileId].extension}` })
            /* some more codes */
          } else {
              /* some more code */
          }
        })
        return updatedFiles 
      }
       })

После разделения кода:

import React, {PureComponent} from 'react';

 class Shopper extends PureComponent {
    constructor (props) {
    super(props); 

   this.uploadModal = this.uploadModal.bind(this);
}

uploadModal () {
    this.uppy2 = import('uppy/lib/core')
      .then((uppydata) => new uppydata({
        autoProceed: false,
        onBeforeUpload: (files) => {
          const updatedFiles = Object.assign({}, files)
          Object.keys(updatedFiles).forEach(fileId => {
            let origName = updatedFiles[fileId].name;
            let metaName =  updatedFiles[fileId].meta.name;

            if (fileDir) {
              this.uppy2.setFileMeta(uploadId, { name: `${addBeforeName}-${metaName}.${updatedFiles[fileId].extension}` })

            /* Here this.uppy2.setFileMeta is giving error */

          } else {
             / * some more code */
          } 
        })
        return updatedFiles 
      }
       })
      )
      .then(useTus => { 
    /* some more codes */
    })

После разделения кода я получаю эту ошибку:

Uncaught TypeError: _this2.uppy2.setFileMeta не является функцией

1 Ответ

0 голосов
/ 03 сентября 2018

Вы назначаете uppy2 обещанию, а не экземпляру класса:

import('uppy/lib/core').then((uppydata) => {
  this.uppy2 = new uppydata({
    autoProceed: false,
    onBeforeUpload: (files) => {
      const updatedFiles = Object.assign({}, files)
      Object.keys(updatedFiles).forEach(fileId => {
        let origName = updatedFiles[fileId].name;
        let metaName =  updatedFiles[fileId].meta.name;

        if (fileDir) {
          this.uppy2.setFileMeta(uploadId, { 
            name: `${addBeforeName}-${metaName}.${updatedFiles[fileId].extension}` 
          })
// ...
...