当前位置: 首页 > 面试题库 >

使用带有javascript导入语法的方括号

汲雅珺
2023-03-14
问题内容

我遇到了一个使用以下语法导入库的javascript库:

import React, { Component, PropTypes } from 'react';

上面的方法和下面的方法有什么区别?

import React, Component, PropTypes from 'react';

问题答案:
import React, { Component, PropTypes } from 'react';

这说:

从名称下导入 默认* 导出,并以相同的名称导入 命名的 导出。'react'``React

*Component``PropTypes

这结合了您可能已经看到的两种常见语法

import React from 'react';
import { Component, PropTypes } from 'react';

第一个用于导入和命名默认导出,第二个用于导入指定的命名导出。

通常,大多数模块将提供单个默认导出或命名导出列表。模块同时提供默认导出
命名导出的情况要少一些。但是,如果存在一个最常导入的功能,但又包含其他子功能,则将第一个导出为默认值,将其余的导出为命名导出是有效的设计。在这种情况下,您将使用所import引用的语法。

其他答案介于错误和令人困惑之间,可能是因为在提出此问题时的MDN文档是错误和令人困惑的。MDN显示了示例

import name from "module-name";

并称为name“将接收导入值的对象的名称”。但这是误导和不正确的。首先,只有 一个
导入值,它将被“接收”(为什么不只是说“分配给”或“用于引用”)name,在这种情况下,导入值是模块的 默认导出

解释此问题的另一种方法是,请注意上述导入与

import { default as name } from "module-name";

OP的示例与

import { default as React, Component, PropTypes } from 'react';

MDN文档继续显示示例

import MyModule, {foo, bar} from "my-module.js";

并声称这意味着

导入整个模块的内容,其中一些内容也被明确命名。这会将myModule(sic)foobar插入当前作用域。请注意,foomyModule.foo相同,并且barmyModule.bar

MDN在此处所说的内容以及其他答案基于不正确的MDN文档所声称的观点绝对是错误的,并且可能基于规范的早期版本。这实际上是

导入默认模块导出和一些明确命名的导出。这会将MyModulefoobar插入当前范围。 出口名称foobar不是
访问的通过MyModule
,这是 默认的 出口,而不是一些伞覆盖全部出口。

(默认的模块导出是使用export default语法导出的值,也可以是export {foo as default}。)

MDN文档编写者可能已经将以下表单弄糊涂了:

import * as MyModule from 'my-module';

这将进口所有的出口产品my- module,并以诸如之类的名称进行访问MyModule.name。默认导出也可以通过以下方式访问MyModule.default,因为默认导出实际上只不过是另一个具有名称的命名导出default。用这种语法,虽然只有一个可以导出默认的导出,但是没有方法可以导入默认导出的一个子集,如果有默认导出,则可以导入所有默认导出。

import myModuleDefault, * as myModule from 'my-module';


 类似资料:
  • 我遇到了一个javascript库,它使用以下语法来导入库: 上面的方法和下面的方法有什么区别?

  • 问题内容: 在寻找的源代码中,我看到了以下功能: 该语法在哪里记录?我的意思是功能的前面。这与声明一个常规数组相同,在该常规数组中括号可以位于数组名称之后或之前,但是在这种情况下,括号可以位于函数名称之后? VS 编辑:2018-05-22 我在这里发现了这种疯狂语法的更多用法:关于Java的十件事 #3是他们提到可以利用上述语法的所有方式的地方 问题答案: 在JLS第8.4节中: … 返回数组的

  • 以下两者之间的区别是什么: 和 ? 我认为它与导出默认标题有某种联系 和

  • 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)

  • Note: 这个特性从 FreeMarker 2.3.4 版本后才存在。 FreeMarker支持一个替换的语法。就是在FreeMarker的指令和注释中用 [ 和 ] 来代替 < 和 >,例如下面这个例子: 调用预定义指令:[#list animals as animal]...[/#list] 调用自定义指令:[@myMacro /] 注释:[#-- the comment --] 为了使用这

  • 问题内容: 我有这个查询: 哪个不会返回正确的结果。但是,在“或”条件周围加上括号可使其工作如下: 我的问题是为什么与众不同?我知道这是在考虑不带括号的OR语句;但我不知道它有什么不同。 我尚未找到任何对此有所帮助的文档。如果有任何链接,我将非常感谢。 问题答案: 这是因为OR的 运算符优先级 低于AND。每当DB看到类似 首先评估AND,即等于 因此,如果您明确想要 相反,您必须在括号中加上括号