Cannot access 'xxx组件名' before initialization

1,191 阅读1分钟

由于组件内引入了多个组件,想把单个文件引入改成同时引入多个组件。

// table/index.vue
import CustomDatePicker from '@/components/date-picker/index.vue'
import CustomSelect from '@/components/select/index.vue'
import CustomTable from './table/index.vue'

改为:

// table/index.vue
import { CustomDatePicker, CustomSelect, CustomTable } from '@/components/index'

但是改成以上引入方式后,控制台却报错 Cannot access 'CustomDatePicker' before initialization。

检查components/index 文件,感觉上也没错

// components/index.js
import CustomTable from './table/index.vue'
import CustomDatePicker from './date-picker/index.vue'
import CustomSelect from './select/index.vue'

export {
  CustomTable,
  CustomSelect,
  CustomDatePicker
}

查资料,是因为CustomTable组件中,引入了CustomSelect和CustomDatePicker两个组件,而在导出的时候需要把这两个组件提升到CustomTable组件之前。

// components/index.js
import CustomDatePicker from './date-picker/index.vue'
import CustomSelect from './select/index.vue'
import CustomTable from './table/index.vue'

export {
  CustomSelect,
  CustomDatePicker,
  CustomTable
}

这样就不报错了。

但是建议尽量不要把CustomTable和另外两个放在同一个文件里面导出,这样会在块之间产生循环依赖关系。