Logo

dev-resources.site

for different kinds of informations.

1.1 Ins & outs of ES6(JavaScript) Import with Realworld Example and Demo Project.

Published at
9/25/2024
Categories
es6
javascript
react
vue
Author
emrancu
Categories
4 categories in total
es6
open
javascript
open
react
open
vue
open
Author
7 person written this
emrancu
open
1.1 Ins & outs of ES6(JavaScript) Import with Realworld Example and Demo Project.

Follow me on Twitter

Introduction

ES6 (ECMAScript 2015) introduced a standardized module system to JavaScript, revolutionizing how we organize and share code. In this article, we'll explore the ins and outs of ES6 imports, providing real-world examples and a demo project to illustrate their power and flexibility.

Table of Contents

  1. Basic Import Syntax
  2. Named Exports and Imports
  3. Default Exports and Imports
  4. Mixing Named and Default Exports
  5. Renaming Imports
  6. Importing All Exports as an Object
  7. Dynamic Imports
  8. Real-world Examples
  9. Demo Project: Task Manager
  10. Best Practices and Tips
  11. Conclusion

Basic Import Syntax

The basic syntax for importing in ES6 is:

import { something } from './module-file.js';
Enter fullscreen mode Exit fullscreen mode

This imports a named export called something from the file module-file.js in the same directory.

Named Exports and Imports

Named exports allow you to export multiple values from a module:

// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;

// main.js
import { add, subtract } from './math.js';

console.log(add(5, 3));      // Output: 8
console.log(subtract(10, 4)); // Output: 6
Enter fullscreen mode Exit fullscreen mode

Default Exports and Imports

Default exports provide a main exported value for a module:

// greet.js
export default function greet(name) {
  return `Hello, ${name}!`;
}

// main.js
import greet from './greet.js';

console.log(greet('Alice')); // Output: Hello, Alice!
Enter fullscreen mode Exit fullscreen mode

Mixing Named and Default Exports

You can combine named and default exports in a single module:

// utils.js
export const VERSION = '1.0.0';
export function helper() { /* ... */ }

export default class MainUtil { /* ... */ }

// main.js
import MainUtil, { VERSION, helper } from './utils.js';

console.log(VERSION);  // Output: 1.0.0
const util = new MainUtil();
helper();
Enter fullscreen mode Exit fullscreen mode

Renaming Imports

You can rename imports to avoid naming conflicts:

// module.js
export const someFunction = () => { /* ... */ };

// main.js
import { someFunction as myFunction } from './module.js';

myFunction();
Enter fullscreen mode Exit fullscreen mode

Importing All Exports as an Object

You can import all exports from a module as a single object:

// module.js
export const a = 1;
export const b = 2;
export function c() { /* ... */ }

// main.js
import * as myModule from './module.js';

console.log(myModule.a);  // Output: 1
console.log(myModule.b);  // Output: 2
myModule.c();
Enter fullscreen mode Exit fullscreen mode

Dynamic Imports

Dynamic imports allow you to load modules on demand:

async function loadModule() {
  const module = await import('./dynamicModule.js');
  module.doSomething();
}

loadModule();
Enter fullscreen mode Exit fullscreen mode

Real-world Examples

  1. React Components:
// Button.js
import React from 'react';

export default function Button({ text, onClick }) {
  return <button onClick={onClick}>{text}</button>;
}

// App.js
import React from 'react';
import Button from './Button';

function App() {
  return <Button text="Click me" onClick={() => alert('Clicked!')} />;
}
Enter fullscreen mode Exit fullscreen mode
  1. Node.js Modules:
// database.js
import mongoose from 'mongoose';

export async function connect() {
  await mongoose.connect('mongodb://localhost:27017/myapp');
}

// server.js
import express from 'express';
import { connect } from './database.js';

const app = express();

connect().then(() => {
  app.listen(3000, () => console.log('Server running'));
});
Enter fullscreen mode Exit fullscreen mode

Demo Project: Task Manager

Let's create a simple task manager to demonstrate ES6 imports in action:

// task.js
export class Task {
  constructor(id, title, completed = false) {
    this.id = id;
    this.title = title;
    this.completed = completed;
  }

  toggle() {
    this.completed = !this.completed;
  }
}

// taskManager.js
import { Task } from './task.js';

export class TaskManager {
  constructor() {
    this.tasks = [];
  }

  addTask(title) {
    const id = this.tasks.length + 1;
    const task = new Task(id, title);
    this.tasks.push(task);
    return task;
  }

  toggleTask(id) {
    const task = this.tasks.find(t => t.id === id);
    if (task) {
      task.toggle();
    }
  }

  getTasks() {
    return this.tasks;
  }
}

// app.js
import { TaskManager } from './taskManager.js';

const manager = new TaskManager();

manager.addTask('Learn ES6 imports');
manager.addTask('Build a demo project');

console.log(manager.getTasks());

manager.toggleTask(1);

console.log(manager.getTasks());
Enter fullscreen mode Exit fullscreen mode

To run this demo, you'll need to use a JavaScript environment that supports ES6 modules, such as Node.js with the --experimental-modules flag or a modern browser with a bundler like webpack or Rollup.

Best Practices and Tips

  1. Use named exports for multiple functions/values, and default exports for main functionality.
  2. Keep your modules focused and single-purpose.
  3. Use consistent naming conventions for your files and exports.
  4. Avoid circular dependencies between modules.
  5. Consider using a bundler like webpack or Rollup for browser-based projects.
  6. Use dynamic imports for code-splitting and performance optimization in large applications.

Conclusion

ES6 imports provide a powerful and flexible way to organize JavaScript code. By understanding the various import and export syntaxes, you can create more modular, maintainable, and efficient applications. The demo project and real-world examples provided here should give you a solid foundation for using ES6 imports in your own projects.

Remember to always consider the specific needs of your project when deciding how to structure your modules and imports. Happy coding!

es6 Article's
30 articles in total
Favicon
Next-Generation Buttons: Implementing the Command Pattern through Web Components
Favicon
Hoisting: facing Temporal dead zone
Favicon
Learn javascript promises. Part 1 β€” What is a promise?
Favicon
Bootcamping 02: Named exports and default exports - does it really matter?
Favicon
Mastering Modern JavaScript: A Deep Dive into ES6 Function Creation and Best Practices
Favicon
Promises: The Ability to Write Asynchronous Code Using Javascript
Favicon
Exploring JavaScript's Modern Primitives: BigInt and Symbol
Favicon
JavaScript ES6 Release Notes: Unleashing the Power of Modern JavaScript
Favicon
WHY YOU SHOULD LEARN ES6
Favicon
Understanding ES6 API's
Favicon
Transpiler vs Polyfills
Favicon
JavaScript Spread Syntax: Expanding Arrays and Objects
Favicon
API Design and Debugging:A Comprehensive Guide for BeginersπŸš€
Favicon
Understanding the JavaScript Spread Operator (With Examples)
Favicon
A Comprehensive Guide to ES6 and Arrow Functions
Favicon
Controla tus promesa con JavaScript
Favicon
Sets
Favicon
Enhanced Object Literals
Favicon
Iteration Stament i.e for-of loop
Favicon
1.1 Ins & outs of ES6(JavaScript) Import with Realworld Example and Demo Project.
Favicon
Math Namespace & BigInt
Favicon
JavaScript - Destructuring Arrays & Objects [Live Doc]
Favicon
ES2015 (ES6) Tips, Tricks, Best Practices, and Code Snippet Examples for Your Day-to-Day Workflow
Favicon
Objects in JavaScript
Favicon
Intro to DSA & Big O Notation
Favicon
Execution Context & Call Stack
Favicon
Asynchronous programming in Javascript - Callbacks, Promises & Async Await
Favicon
Loops in JavaScript !!πŸ“šπŸ”„
Favicon
Array
Favicon
Functions

Featured ones: