我一般都不熟悉React或编码背景。我不确定以上声明之间有什么区别。预先感谢!
答案 0 :(得分:5)
最常用的进口商品有3种。
类型1
import * as A from 'abc';
这将导入在abc中标记为导出的所有内容。您可以使用以下代码访问它们。
A.Component
类型2
import {A} from 'abc';
这将从abc导入A。它将像这样导出。
export const A = () => {};
类型3
import A from 'abc';
const A = () => {};
export default A; // at the end of component
答案 1 :(得分:1)
模式import * as React from 'react
与在React中使用类型系统(例如Flow或Typescript)有关。使用import React from 'react'
导致导入类型定义时出现问题。现在,您可以在Typescript中使用allowSyntheticDefaultImports
标志,即使您使用import React from 'react'
,也可以解决此问题并导入所有类型。
答案 2 :(得分:1)
通常,对于ES2015(ES6)模块
import * as name from 'module';
是一个namepace导入,指示所有导出的对象都将放置在名称命名空间中。然后,您可以这样做:
name.blabla1
name.blabla2
etc ...
名称空间不可调用。所以你不能做:
name();
而:
import name from 'module';
是默认导入,等效于:
import {default as name} from 'module';
您仅从模块中导入默认对象。
在React的情况下,混淆可能/可能是由于React的默认导出为... React(出于互操作性原因,Babel添加了默认导出)这一事实。严格来说,使用的语法是:
import * as React from 'react';
或
import {Whatever} from 'react';
以下工作仅是由于Babel进行的转换(不确定100%确定):
import React from 'react';
import React, { Whatever } from 'react';
对于使用TypeScript(2.7版之前)的用户,默认设置为:
import * as name from 'module';
等同于:
const name = require('module');
和:
import name from 'module';
等同于:
const name = require('module').default;
从2.7版开始,如果编译器设置将“ esModuleInterop”指定为true(建议使用),则可以使用ES2015语法行为。