import、export使用介绍
import、export使用介绍
ES6提供的import、export方法, 使组件化开发模式迈向新高度。本文来介绍import、export的语法及使用方法。
根据 export 的导出方式,可以概括为命名导出、默认导出两种方式。
命名导出常用语法:
export { name1, name2, ..., nameN };
export { variable as name1, variable as name2, ..., nameN };
export const name1 = ..., name2 = ..., nameN; // also var, let
export * from ...;
export { name1, name2, ..., nameN } from ...;
export { import1 as name1, import2 as name2, ..., nameN } from ...;
默认导出:
export default expression;
export default function() { ... }; // also class, function*
export default function name1() { ... }; // also class, function*
export { name1 as default, ... };
对应 export 的多种导出方式,import 也有多种倒入方式,使调用方式更加灵活多变。
import 使用语法如下:
import defaultExport from 'module-name';
import * as name from 'module-name';
import { exportName1, exportName2, ... } from 'module-name';
import { exportName1, exportName2 as alias, ... } from 'module-name';
import defaultExport, * as name from 'module-name';
import 'module-name';
接下来,我们将根据常见使用场景来举例说明使用方法。
导出已声明的变量或函数:
util.js
const aaa = 'aaa';
function cube(x) {
return x * x * x;
}
// 导出已声明的变量时,只能用这种方式,否则会报错
export { aaa, cube };
上述导出的引用方式如下:
index.js
import { aaa, cube } from './util';
console.log(aaa, cube); // 'aaa' 8
考虑到导出变量名 aaa 的语义化辨识度低,可考虑如下引入方式:
import { aaa as baseStr, cube } from './util';
console.log(baseStr, cube(2)); // 'aaa', 8
此时,若在index.js文件中调用变量aaa,会提示" aaa is not defined " 。
变量命名费时费心还怕冲突吗?直接导入整个模块也不错:
import * as util from './util';
console.log(util.aaa, util.cube(2)); // 'aaa' 8
若只需引入 cube 方法,引用方式如下:
import { cube } from './util';
console.log(cube(2)); // 8
也可以直接导出声明的变量或函数,如下:
export const aaa = 'aaa';
export function cube(x) {
return x * x * x;
}
使用方式与先声明再导入的使用方式一致,不在赘述。
export 方式决定了 import 方式。上述的多种引入方式中,引入的变量名都是固定的,即引入的变量名必须与导出的变量名保持一致。而 export 的默认导出却能打破这个限制。
可以被设置为默认导出的,有以下几种情况:
默认导出函数:
util.js
export default function cube(x) {
return x * x * x;
}
index.js
import math from './util';
console.log( math(2)); // 8
默认导出类:
util.js
export default class {
constructor (name, age) {
this.name = name;
this.age = age;
}
}
index.js
import Person from './util';
const obj = new Person('xiaoming', 24);
console.log( obj ) ; // { name: 'xiaoming', age: 24 }
默认导出表达式:
util.js
export default 1 + 2;
index.js
import result from './util';
console.log( result ) ; // 3
注:不能使用var、let、const语句直接作为默认导出,可以声明变量后再作为导出
错误示例:
export default const aaa = 'aaa';
正确示例:
const aaa = 'aaa';
export default aaa;
默认导出的其他尝试:
1,每个组件只能有一个默认导出语句,否则会报错 "Duplicate export 'default'"
2,一个组件包含默认导出与命名导出,如下:
util.js
const aaa = 'aaa';
export { aaa };
export default 1 + 2;
index.js
import result, { aaa } from './util’; // 默认导出命名在前,否则会报错
console.log( result, aaa ) ; // 3 'aaa'
兼容性
截止目前,有些浏览器并不支持 import 与 export 方法,在实际项目中多使用转换器做转换来实现,常用转换器有:Babel、Webpack、Rollup等。
import、export使用介绍的更多相关文章
- require/exports 和 import/export 区别
零.区别 1.require/exports 是 CommonJS 的标准,适用范围如 Node.js 2.import/export 是 ES6 的标准,适用范围如 React 一.间接获取对象 ( ...
- ES6常用语法简介import export
ES6常用语法简介import export let与var用法区别 //var var a = []; for (var i = 0; i < 10; i++) { a[i] = functi ...
- Salesforce LWC学习(三) import & export / api & track
我们使用vs code创建lwc 时,文件会默认生成包含 template作为头的html文件,包含了 import LightningElement的 js文件以及对应的.js-meta.xml文件 ...
- Data import/export of Netezza using external table
Introduction External table is a special table in Netezza system, which could be used to import/exp ...
- [Hive - LanguageManual] Import/Export
LanguageManual ImportExport Skip to end of metadata Added by Carl Steinbach, last edited by Le ...
- 前端 高级 (二十五)vue2.0项目实战一 配置简要说明、代码简要说明、Import/Export、轮播和列表例子
一.启动服务自动打开浏览器运行 二.配置简要说明 1.node_modules 安装好的依赖文件,中间件等,所在位置 2.package.jason 配置当前项目要安装的中间件和依赖文件 { &quo ...
- require/exports 与 import/export 的区别?
文章作者:寸志链接:https://www.zhihu.com/question/56820346/answer/150724784来源:知乎 遵循的模块化规范不一样 模块化规范:即为 JavaScr ...
- gulp 配置达到实现import export支持
gulp.task('tojs', () => { return gulp.src('./es/**/*.js') .pipe(babel({ babelrc: false, plugins: ...
- 探讨ES6的import export default 和CommonJS的require module.exports
今天来扒一扒在node和ES6中的module,主要是为了区分node和ES6中的不同意义,避免概念上的混淆,同时也分享一下,自己在这个坑里获得的心得. 在ES6之前 模块的概念是在ES6发布之前就出 ...
随机推荐
- SQL面试题之行转列
典型的课程表: mysql> select * from course; +----+------------+----------+------------+ | id | teacher_i ...
- SQL将原始数据进行MD5加密转存
先来描述下情况吧,首先有一批用户之前批量录入后默认的密码为6个8然后进行MD5加密后进行存储的,现在需要对其更改根据用户身份证号后6位作为密码. 1.首先发现我们sqlserver05以上的版本是自带 ...
- 基于alpine用dockerfile创建的爬虫Scrapy镜像
一.下载alpine镜像 [root@DockerBrian ~]# docker pull alpine Using default tag: latest Trying to pull repos ...
- awk将某个字段按照分隔符分割之后统计次数
cat label_movie2|grep BBD252CC0A4FE7D10C990261D5CEACB5|awk -F "," '{for(i=2;i<NF;i++) p ...
- webgl之观察三维空间
在之前的教程中,我们已经接触到了3d的基本应用,而这里,将会继续介绍两种不同的相机,即透视相机和正投影相机:还会学习设置相机的不同参数,这样就可以使场景以不同的角度显示出来. 一.正投影和透视投影概念 ...
- android开发学习——day6
关于UI的几个插件学习 button和textview,以及点击button利用Toast提醒,editText private EditText editText; @Override protec ...
- dubbo-常用配置
一.启动时检查 官网说明: Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true&q ...
- vuejs之Vue Devtools
Vue Devtools大法好 这是一篇小白friendly教程 Vue Devtools是一款谷歌浏览器插件,专门为调试vue而设计.假设你做了一个vue应用,当你在调试的过程中,打开的控制台是这样 ...
- UTF-8和GBK编码的区别
UTF-8:对英文使用8位(一个字节).中文使用24位(三个字节)编码.对于英文字符比较多的网站一般用utf-8来编码以节省空间:包含全世界所有国家需要用到的字符,其编码的蚊子可以在各国各种支持utf ...
- 【转载】CentOS中crontab定时计划任务的使用
转载自:http://blog.csdn.net/testcs_dn/article/details/48780971 概述 利用“任务计划”,可以将任何脚本.程序或文档安排在某个最方便的时间运行.通 ...