javascript - 什么是“导入为”?
问题描述
例如,在下面:
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'
Router, Route, Switch
和之间有什么关系BrowserRouter
?这是一种解构形式吗?
如果是这样,我认为解构是使用以下语法完成的:
import React, { Fragment } from 'react'
function App() {
return (
<Fragment>
//...
</Fragment>
);
}
解决方案
它与解构非常相似,但并不完全相同。当您想以不同的名称导入库的命名导出时,该as
关键字是一个特殊的关键字。(有关命名导出的更多信息,请参见下文)
因此,当库开发人员从他们的库中导出函数或任何内容时,他们会编写如下内容:
export const someFunc = () => {};
export const someOtherFunc = () => {};
export const someThirdFunc = () => {};
这些被称为“命名导出”。当您编写类似的内容时,它们就是您要导入的内容
import { someFunc } from 'some-library';
那么as
它是什么让您以您选择的新名称导入该命名导出。
import { someFunc as somePreferredName, someOtherFunc as someOtherPreferredName, someThirdFunc } from 'some-library';
您还可以将每个命名导入导入到单个对象中,如下所示:
import * as someLibrary from 'some-library';
然后你可以做类似的事情someLibrary.someFunc()
;
或者您可以导入“默认导出”。默认导出包含的确切内容由库的作者确定,但通常默认导出等效于此答案前一部分中的语法。
所以在 React 的情况下,下面两行是等价的:
// import React from 'react';
import * as React from 'react'; // Imports every named export of 'react' and put it into an object named React.
把这一切放在一起
需要注意的是,React 特别需要你导入默认的 export。这不是 ES6 导入的东西,而是 React v16.x 的要求。对于其他包,您可以只导入一个包,它会按预期运行。
Lodash 是一个更简单的例子。对于 Lodash,导入默认导出相当于导入所有内容。
// Import the named export "debounce" from 'lodash' into a variable of the same name
import { debounce } from 'lodash';
// Imports the named export "debounce" from 'lodash' into a variable of your chosen name
import { debounce as anyNameYouWant } from 'lodash'
// Imports the default export of 'lodash' into the object named anyNameYouWant
import anyNameYouWant, { debounce } from 'lodash'; // And then additionally, imports debounce into a variable of the same name
请注意,默认导入没有“as”关键字。它们没有命名为导出,因此当您导入它们时,您总是选择名称。这就是as
允许您做的事情,但对于命名导出。
推荐阅读
- python - 无法在 Windows 10 上的 Anaconda 3.6 中导入张量流
- python - windows平台上python 3中从.ui到.py的转换
- sql - SQL中带有条件的ROUNDUP函数
- ckeditor5 - 如何在 CKEditor 5 中更新元素()?
- javascript - 使用 JavaScript 显示和隐藏内容
- android - 如果其他情况,Android kotlin 导入合成
- android - 使用 Glide 从 Fragment 中的 RecyclerView 向 Activity 传递数据时应用程序崩溃
- string - 如何将“Hello World”加载到 WebAssembly 的 `.data` 部分浪费
- xamarin - 手势识别器在 Xamarin.Forms Slider 中不起作用吗?
- mysql - 在 .NET Core 2、Mac OS、Visual Studio for Mac 上使用 MySQL:ArgumentOutOfRangeException:长度不能小于零