# 【JavaScript进阶】export、export default和import
问题起源:同事给项目加新的模块的时候,React
报了这个错👇,然后模块没有加载成功。。
...Lazy element type must resolve to a class or function...
最后搞了半天发现是export
的问题,模块导出写错了不符合规范,导致React
的懒加载失败了。我发现我还是太菜鸡了😐
本文研究一下export
的问题,还有与之对应的import
。
# 一、ES6最重要特性
export
还有import
是ES6最重要的特性之二。
export
的作用是将一个JavaScript
模块中的值、方法、对象等导入到另一个模块中,另一个模块通过import
语句来使用。
在导入的模块中只能读取,不能修改。想要修改的话只能去到导出的模块中修改,并且修改的值会实时更新。
# 二、使用方法
# 语法
有两种exports
导出方式:
- 命名导出(每个模块包含任意数量)
- 默认导出(每个模块包含一个)
# 用法
export
// export
const datas = [];
function print (str) {
console.log(str);
}
export { datas, print };
// 直接导出 上下等效
export const datas = [];
export function print (str) {
console.log(str)
}
// import
import { datas, print } from "export"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
export default
顾名思义,默认导出只能导出一个,并且可以在导入模块中为其定义任何符合规范的名称。
并且一个模块中只能有一个export default
。
// export-default
function print (str) {
console.log(str);
}
export default print;
// import
import print from "export-default"
import print1 from "export-default"
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 三、区别
1.
export
可以在一个模块中使用多次,而export default
只能使用一次。2.使用
export
和export default
时,import
要与之对应:export { datas, func1 }
=>import { datas, func1 } from "xxx"
export default func1
=>import func2 from "xxx"
3.
export
导出的变量、方法等在导入模块中的变量名必须与导出模块相同;export default
导出的变量、方法等在导入模块中可以使用任何符合命名规范的变量名。