Что делает import * в Javascript?

Я просматривал это репо на Github и пытался понять работу кода

Здесь автор (или программист) упомянул import * в нескольких местах, поэтому я пытаюсь понять и понять, как работает import *?

Сначала в Game.js файл его репо он упомянул / написал вот так

import * as actions from '../actions';

В VS Code, когда я нажимаю на '../actions с помощью команды, он перенаправляет меня в этот файл -> index.js

то в Index.js у них есть что-то вроде этого

import * as ActionTypes from './action-types';

когда я нажимаю на ./action-types, он перенаправляет меня сюда действие-типы.js

Я просмотрел документы firefox, но я не смог четко разобраться в первом примере, например, в одном: папка действий содержит несколько файлов и как импортировать * как действия из '../actions'; означает файл index.js

Пока я понимаю, что он вызвал / сослался на функции, используя actions.functionName() или ActionType.TypeName

Мой главный вопрос остается

как файл import * as actions from '../actions'; mean index.js?

Как "'../actions' означает файл index.js?" не имеет ничего общего с типом импорта *.

Bergi 15.11.2018 14:42

@Tholle Я думаю, что OP вызывает недоумение, так это то, что в этом исходном дереве ../actions с точки зрения этого исходного файла Game.js относится ко всему каталогу исходных файлов JavaScript.

Pointy 15.11.2018 14:42

Также важно отметить, что * является обычным символом wildcard при выполнении поиска или запросов. Он просто соответствует всему. В этом случае вы импортируете все, что соответствует *, из файла ../actions. Итак, просто все из файла. Я также предполагаю, что ../actions - это ленивый способ записи ../actions.js

TheCrzyMan 15.11.2018 14:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
8
4
7 967
3

Ответы 3

Когда вы ссылаетесь на каталог в операторе импорта, он просматривает и загружает файл index.js в этом каталоге. Обычно я экспортирую классы и функции в этот каталог в сгруппированном объекте, чтобы к ним можно было легко получить доступ:

Например, в index.js я экспортирую что-то вроде:

{
    Class1,
    method1
}

где каждый импортируется как таковой:

import Class1 from './Class1';

Таким образом, они просто группируют классы / методы / ... которые находятся в файлах в каталоге.

Тогда вы можете легко получить к нему доступ как таковой:

import { Class1, method1 } from './mymodule';

против

import Class1 from './mymodule/Class1';

Import в js - это новый синтаксис ES6 для импорта модуля, он имеет ту же работу, что и require, но легче фильтровать то, что вы хотите в модуле

В вашем примере вы import * as actions from '../actions'; вы импортируете все функции из файла ../actions

то же самое делать const actions = require('../actions')

но легче управлять тем, что ты хочешь

этот синтаксис работает не во всех браузерах, поэтому обязательно используйте транспилятор с babel или другими

вы также можете увидеть этот синтаксис в Python

Синтаксис import * as name импортирует все экспортированное содержимое файла javascript.

For example, if you want to import an entire module's contents, then access the doAllTheAmazingThings() function

import * as myModule from '/modules/my-module.js';
myModule.doAllTheAmazingThings();

От документы

Другие вопросы по теме