import * as'react'的反应与import'react'的反应和有什么区别

时间:2019-02-08 03:50:32

标签: reactjs

我一般都不熟悉React或编码背景。我不确定以上声明之间有什么区别。预先感谢!

3 个答案:

答案 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语法行为。