export和export default的区别(简述)

目录

什么是export和export default?

export:

起别名:

引入使用:

export default:

引入:

注意点:

导入导出的应用:

场景:

举例:

fileA.js 的内容如下:

fileA.js 的内容如下:

在 index.js 文件中:

其他页面使用index的内容:

案例:

如果上面的举例还是不明白,可以看看下面这个代码,你应该能很清楚的知道了哦

什么是export和export default?

ES6(ECMAScript 2015)及其后续版本中,export 和 export default 是两种导出模块内容的方法,它们在前端(以及后端或其他任何JavaScript环境)中都很有用。

我们可以通过这两种,从模块中导出变量、函数、类或对象。其他模块可以通过import导入命名项来使用它们。

export:

可以从模块中导出多个变量、函数、类或对象。其他模块可以通过导入这些特定的命名项来使用它们。

示例

现在,假设我们有一个名为 my.js 的模块,它使用默认导出:

一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。

// my.js  
//变量
export let str= "我是export的str";  
export  let num=5201314;
//函数
export function str_num(sth) {   
  return str+num;
}

上面每次需要写export,太麻烦了,简化一下,写在文件的末尾通过一个对象导出多个

// my.js  
//变量
let str= "我是export的str";  
let num=5201314;
//函数
function str_num(sth) {   
  return str+num;
}

export {
str,num,str_num
}

起别名:

假如在引入的文件中可能存在重复的名称,就可以用as来对导出的数据起个别名(相当于外号,就如同班同学一样的名字,需要区分一下,像大龙小龙之类)

// my.js  

export {
str as newStr,num as newNum,str_num as newStrNum
}

引入使用:

导入的时候需要带花括号{},将每个变量函数名写清楚,如使用了别名就需要引入的为别名


import { str,num, str_num} from 'xxx路径(./my.js)';
//或
import { newStr,newNum, newStrNum} from 'xxx路径(./my.js)';

export default:

export default 允许你导出一个模块的默认导出。这意味着其他模块在导入时不需要知道导出的具体名称,可以使用任何名称引用它。每个模块只能有一个默认导出

这个也可以用上面的as进行起别名,都一样的

// my1.js  
  
const defaultStr = "你好呀,我是默认是str";  
  
export default defaultStr;

引入:

export default只能使用一次。所以,import命令后面才不用加花括号{}

// my1.js  
  
import defaultStr from './my1.js';  

注意点:

1.export default与export不要同时使用

2.单个导出使用export default(默认导出),多个导出使用export

3.在一个文件或模块中,export、import可以有多个,export default仅有一个

导入导出的应用:

场景:

在一个文件中导入多个其他JavaScript文件,并重新导出这些文件中的内容,再在其他的页面使用。

举例:

假设你有三个文件:fileA.jsfileB.js 和你想要重新导出的 index.js

fileA.js 的内容如下:

// fileA.js  
export const somethingFromA = '这是文件 A';  

export function doSomethingA() {  
  console.log('在fileA做些奇怪的事情');  
}

fileA.js 的内容如下:

// fileB.js  
export const somethingFromB = '这是文件 B';  

export function doSomethingB() {  
  console.log('在fileB做些奇怪的事情');  
}

在 index.js 文件中:

你需要通过*来导入上面的文件内的所有,再通过export进行导出

// index.js  
import * as A from './fileA';  
import * as B from './fileB';  
  
// 重新导出 fileA.js 的内容  
export { somethingFromA, doSomethingA } from './fileA';  
  
// 重新导出 fileB.js 的内容  
export { somethingFromB, doSomethingB } from './fileB';  

// 或者,如果你想要简化,你可以直接使用之前导入的命名空间  
export { A as fileA, B as fileB };

这个文件中导入了 fileA.js 和 fileB.js 中的所有内容,并且使用 export { ... } from '...'; 语法重新导出了它们。这样,其他文件可以通过导入 index.js 来访问fileA.js和 fileB.js 中导出的内容。

简化代码,你可以直接导出之前导入的命名空间A 和 B),这样其他文件可以通过解构赋值访问 fileA.js 和 fileB.js 中的内容。但这种方法可能会让使用者不清楚 A 和 B 分别代表什么,因此注释和文档就显得尤为重要。

其他页面使用index的内容:

// someOtherFile.js  
import { somethingFromA, doSomethingA, somethingFromB, doSomethingB, fileA, fileB } from './index';  
  
console.log(somethingFromA); // 输出 "这是文件 A"  
doSomethingA(); // 输出 "在fileA做些奇怪的事情"  
  
console.log(somethingFromB); // 输出 "这是文件 B"  
doSomethingB(); // 输出 "在fileB做些奇怪的事情"  
  
// 访问 fileA 和 fileB 命名空间中的其他内容(如果有的话)  
console.log(fileA); // fileA 命名空间对象  
console.log(fileB); // fileB 命名空间对象

请注意,在实际项目中,过度使用重新导出可能会导致代码难以理解和维护,因此请谨慎使用,并确保代码清晰、易于阅读。

案例:

如果上面的举例还是不明白,可以看看下面这个代码,你应该能很清楚的知道了哦

我注释已经写的很明白了

import { createPinia } from 'pinia'
// -----------------------------------统一导出,代码简洁,入口唯一 一个模块下的所有资源通过index导出
// 先导入 再导出 麻烦
// import { userStore } from './modules/user'
// export  userStore
//----------------------------------------------------------------
// 优化1
// export { userStore } from './modules/user' //相当于 先导入 再导出(import与export复合写法
//----------------------------------------------------------------
// * 整体导入 // 优化2
// import * as m_user from './modules/user'
// console.log(m_user) //输出对象 (导入几个输出几个)
// ----------------------------------------------------------------
// * 整体导入导出  // 优化3
export * from './modules/user'
export * from './modules/consult'

import persist from 'pinia-plugin-persistedstate' //引入 下载pnpm i pinia-plugin-persistedstate

const pinia = createPinia() //创建对象

pinia.use(persist) //使用 pinia-plugin-persistedstate 实现pinia仓库状态持久化

export default pinia //main.js 进行接收

// 这个文件作为stores的出口,一个模块只能默认导出一次

我讲的就这么多哦,希望大家能从中,学到小许,有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

じòぴé南冸じょうげん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值