当前位置: 首页 > 知识库问答 >
问题:

为什么我需要在ES6中用数字括号{}包装一些导入?[副本]

田远
2023-03-14

我在ES6中发现了一个奇怪的情况。例如,我正在使用npm包reactreact-router。我想将它们导入文件

import React from "react";
import { browserHistory } from "react-router";

奇怪的情况是,我需要将browserHistory包装在图括号中,但我不需要包装React。原因是什么?

import { React } from "react"; // React is undefined
import browserHistory from "react-router"; // browserHistory is undefined

我需要自定义导入的原因是什么?

共有2个答案

齐琦
2023-03-14

如果要导入的模块具有默认导出,则不必使用{}语法来访问给定的导出。必须通过{}语法访问命名(非默认)导出。一个模块可以有一个默认导出以及许多命名导出。

一个例子是React,它是一个默认的导出,但是模块也有一个命名的组件导出。要导入这两个导出,将使用语法:import-React,{Component}from'React'

孟雪风
2023-03-14

ES6模块区分两种导出:默认导出和其他导出。

每个模块最多可以有一个默认导出。默认导出有点像模块的“主要吸引力”。这应该是你想让模块拥有的东西。所有其他出口都属于其他类别。

因此,一个模块可以有任意数量的导出(甚至零),其中最多有一个可以是默认导出。

在语法的导出侧,默认导出只需在导出关键字后添加一个默认即可标记:

// this is a normal export
export var foo = 'foo';

// this is a default export
var bar = 'bar';
export default bar;

在语法的导入端,这会变得更加复杂:默认导出是在花括号之外导入的。所有其他出口都是在花括号内导入的。

import bar, { foo } from 'some-module';

这将导入模块的默认导出成员为bar,并导入(命名的)其他导出foo。请注意,默认导出没有固定的名称:导出时成员的原始名称并不重要。相反,您在导入它时给它起了一些名字。所以你也可以这样写:

import baz, { foo } from 'some-module';

这仍然会从模块导入相同的默认导出,但会给它一个不同的名称。但是,其他导入需要有正确的名称,因为这是用来识别它们的。但是,您可以使用作为关键字为他们指定不同的名称。

在使用exportimport语句时,还有一些事情需要知道。您应该检查MDN以获得它们的完整描述。

 类似资料:
  • 这似乎很明显,但我发现自己有点困惑,什么时候在ES6中为导入单个模块使用花括号。例如,在我正在处理的React-Native项目中,我有以下文件及其内容: 在todoReducer.js中,我必须在没有花括号的情况下导入它: 如果将括在花括号中,则会得到以下代码行的以下错误: 无法读取未定义的属性todo 类似的错误也发生在我的带有花括号的组件上。我在想什么时候应该对单个导入使用花括号,因为很明显

  • 但代码不起作用。我是否需要将launchActivity定义为一个规则,或者是否存在我需要在Gradle中导入的库? 这些是我已经有的进口品

  • 问题内容: 假设我想创建一个 Integer (不是int)类的对象,因为Integer类在另一个包中,所以我必须导入java.lang包以创建 Integer类 的对象。但是我没有导入包,但编译器没有给我一个错误。 问题答案: 这是在Java语言规范(JLS)的第7章中定义的: 编译单元自动导入预定义包中声明的所有类型。

  • 我有两个文件,第一个是todoHelper。js 它有 导入{addTodo} 但我也看到人们在做默认导出,而不仅仅是导出。有什么区别?

  • ES6标准的一个新特性是Map类,用于创建数据的键:值集合。好,对。但是,为什么Javascript需要这样一个类呢?JS对象表示法实际上也是数据的键:值集合,这还不够吗?那么,有什么区别呢?

  • 问题内容: 这似乎很明显,但是我发现自己对于何时使用花括号在ES6中导入单个模块感到有些困惑。例如,在我正在从事的React- Native项目中,我具有以下文件及其内容: initialState.js 在TodoReducer.js中,我必须不带花括号将其导入: 如果将花括号括起来,则以下代码行将出现以下错误: 无法读取未定义的属性待办事项 TodoReducer.js: 带有花括号的组件也发

  • 我和同事一起创建了一个Angular 5应用程序。我为我的所有界面创建了一个文件夹,并按功能进行分组。然而,我没有在它们上包含任何导出符号,并且在使用它们时,我从不需要导入它们……它们只存在,不会产生任何编译错误。我喜欢这种方式,因为它使代码更干净,但我只是在利用一些bug吗?我的同事以“正确”的方式完成了它,并且需要在任何时候导入他想要使用的界面。有什么想法吗?您应该如何创建存在于单独文件中的接

  • 问题内容: 看一下这个文件: 它不编译;我需要。现在考虑这一点: 完全一样,只是用代替,所以不应该编译,对吧?错误。 好的,所以不必导入是众所周知的,但是 为什么 呢?“明显”的答案是因为它的使用频率远高于,但是不应该“隐式导入”吗?原始包装器类,例如和呢?用 远远 往往比和,但我必须进口,并不需要进口。 什么是落后不需要对进口的原因,,,和其他几个班? 问题答案: 明显的答案是因为它的使用频率远