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

什么时候应该将花括号用于ES6导入?

张璞
2023-03-14
问题内容

这似乎很明显,但是我发现自己对于何时使用花括号在ES6中导入单个模块感到有些困惑。例如,在我正在从事的React-
Native项目中,我具有以下文件及其内容:

initialState.js

var initialState = {
    todo: {
        todos: [
            {id: 1, task: 'Finish Coding', completed: false},
            {id: 2, task: 'Do Laundry', completed: false},
            {id: 2, task: 'Shopping Groceries', completed: false},
        ]
    }
};

export default initialState;

在TodoReducer.js中,我必须不带花括号将其导入:

import initialState from './todoInitialState';

如果将initialState花括号括起来,则以下代码行将出现以下错误:

无法读取未定义的属性待办事项

TodoReducer.js:

export default function todos(state = initialState.todo, action) {
// ...
}

带有花括号的组件也发生类似的错误。我想知道何时应该为单个导入使用花括号,因为显然,当导入多个组件/模块时,必须将它们括在花括号中,这我知道。

单个模块,或者我绝不应该在ES6中使用大括号来导入单个模块(这显然不是情况,如我所见,需要使用花括号将其导入)


问题答案:

这是 默认导入

// B.js
import A from './A'

仅当A具有 默认导出 时才有效:

// A.js
export default 42

在这种情况下,导入时分配给它的名称无关紧要:

// B.js
import A from './A'
import MyA from './A'
import Something from './A'

因为它会始终解析到任何的是 默认的导出A

这是一个 名为import的导入A

import { A } from './A'

仅在A包含 名为的命名导出A时才有效:

export const A = 42

在这种情况下,名称很重要,因为您要 通过其导出名称 来导入 特定内容

// B.js
import { A } from './A'
import { myA } from './A' // Doesn't work!
import { Something } from './A' // Doesn't work!

为了使这些工作,你会添加一个 对应的命名出口A

// A.js
export const A = 42
export const myA = 43
export const Something = 44

一个模块只能具有 一个默认导出 ,但可以具有任意数量的 命名导出 (零,一个,两个或多个)。您可以将它们全部一起导入:

// B.js
import A, { myA, Something } from './A'

在这里,我们将默认导出导入为A,并将导出名称分别命名为myASomething

// A.js
export default 42
export const myA = 43
export const Something = 44

导入时,我们还可以为它们分配所有不同的名称:

// B.js
import X, { myA as myX, Something as XSomething } from './A'

默认导出通常用于通常希望从模块中获取的内容。命名的出口通常用于方便的实用html" target="_blank">程序,但并不总是必需的。但是,由您决定如何导出内容:例如,一个模块可能根本没有默认导出。



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

  • 问题内容: 我有两个文件,第一个是todoHelper.js 它有 以后我想在另一个文件中使用,我只是做 但是我也看到人们在默认情况下执行导出而不只是导出。有什么区别? 问题答案: 每个文件只能有一个导出默认值,因此当您导出默认值时,例如 您可以像导入 由于babel知道您正在尝试访问默认组件,因此可以使用任何名称在文件中访问它 现在假设你做 您可以在文件中包含多个此类导出,例如 当您导入时,您将

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

  • 问题内容: 我怎么能说: 为什么函数调用中不需要括号,而最后一行呢? 问题答案: 是一个功能 调用该函数并产生该函数返回的任何值。 setTimeout的目的是在一段时间后运行代码。你需要的功能只是传递给它(这样的setTimeout可以自称在适当的时候函数),因为如果你将它传递给setTimeout的前调用的函数(用括号),将执行 现在 而不是1秒后,。

  • 问题内容: 我知道他们两个都禁用了Nagle的算法。 我什么时候应该/不应该使用它们中的每一个? 问题答案: 首先,不是所有人都禁用Nagle的算法。 Nagle的算法用于减少有线中更多的小型网络数据包。该算法是:如果数据小于限制(通常是MSS),请等待直到收到先前发送的数据包的ACK,同时累积用户的数据。然后发送累积的数据。 这将对telnet等应用程序有所帮​​助。但是,在发送流数据时,等待A

  • 问题内容: 在该类中,有两个字符串,和。 有什么不同?我什么时候应该使用另一个? 问题答案: 如果你的意思是和则: 用于在文件路径列表中分隔各个文件路径。考虑在上的环境变量。您使用a分隔文件路径,因此在上将是;。 是或用于拆分到特定文件的路径。例如在上,或