Javascript 为包/库导入星号的良好实践?

Javascript 为包/库导入星号的良好实践?,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我在github的某个地方看到人们导入*,我不知道他为什么这样做,例如: import * as React from 'react'; export const doSomething = () => { return React.useMemo(() => { return { something: window.location.href }; }, []); }; 他对其他包裹也做了同样的处理。我们为什么不这样做呢 从“react”导入

我在github的某个地方看到人们导入
*
,我不知道他为什么这样做,例如:

import * as React from 'react';

export const doSomething = () => {
  return React.useMemo(() => {
    return {
      something: window.location.href
    };
  }, []);
};
他对其他包裹也做了同样的处理。我们为什么不这样做呢


从“react”导入{useMoom}

使用
*
或显式导入的两种建议都是可能的,并将按预期工作。 asterix将导入位于“react”库下的所有组件、挂钩和更多工件,因此在使用

import * from "react";
您可以自由使用任何类型的钩子或组件,而无需显式导入

不过,最好的做法是只导入与应用程序或组件相关的模块

import React, { useMemo } from "react";

这种方法将确保您不会导入未使用的组件,这些组件将对您的捆绑产品造成沉重负担,并将被标记为死代码。

好的,为了扩展我的答案,我将说:您有两种选择

  • import React,{usemo}来自“React”
  • 福利?您只需要导入所需的内容,而且,与第二个选项相比,您的代码会稍微短一些,因为您可以使用useMemo();直接地

    这也是reactjs.org展示其示例的方式,这是一个重要的良好实践信号

  • 从“React”导入React
  • 它似乎与第一个选项相似,但您使用的是直接反应。 如何访问
    usemo()
    <代码>反应。使用备忘录()
    。所以,是的,你猜到了,第一种选择的时间稍微长一点,但我不认为这是一个问题


    这也是material ui展示示例的方式。这也是一种很好的方法(也是我使用的方法)

    我认为最常见的是从“React”导入React;然后使用React.useMemo()然后答案应该是第二个,只导入您只需要的方法。我不认为*是好的做法,不是吗?是的,使用显式导入比使用
    *
    更可取,那么
    *
    的用途是什么?什么时候使用它是正确的,因为它是“坏的”?使用
    *
    只会影响你的应用程序包,一些开发人员不介意包的大小或死代码,所以他们无论如何都会使用它。如果您大量使用所有类型的“react”导入,而不是逐个手动导入,您可以简单地使用asterix一次导入所有类型的导入。我个人并不经常使用ASTRIX,但我会考虑使用它,当我需要快速构建一个PoC或代码片断,但不是要去生产的东西。我问你为什么不应该只导入你需要的东西?基本上,较短的导入语句和对所有项目的短调用。既然它是“坏的”,那么它的用途是什么?什么时候使用它是正确的?