--- marp: true theme: gaia paginate: true backgroundColor: #fff header: "Web Engineering – DHBW Stuttgart" footer: "Michael Czechowski – SoSe 2026" title: JavaScript & Frameworks ---  # Web Engineering **DHBW Stuttgart** · Informatik / Wirtschaftsinformatik **Sommersemester 2026** · Sitzung 3 — JS, Frameworks & Build Tools [https://librete.ch/dhbw/](https://librete.ch/dhbw/) ---  --- # Ressourcen zum Selbstlernen - **CODE CRISPIES** — [codecrispi.es](https://codecrispi.es/) - **Online Code-Editor** — [codepen.io](https://codepen.io/pen/) - **MDN** (Mozilla Developer Network) — [developer.mozilla.org/de/](https://developer.mozilla.org/de/) - **Flexbox-Spiel** — [flexboxfroggy.com](https://flexboxfroggy.com/) - **Grid-Spiel** — [cssgridgarden.com](https://cssgridgarden.com/) # JavaScript --- # ECMAScript - **Ecma International** — European Computer Manufacturers Association - Seit **1997** standardisiert als **ECMA-262** - Implementierungen: **JavaScript** (Netscape, später Mozilla), **JScript** (Microsoft), **ActionScript** (Adobe Flash) etc. - Aktuelle Version: **ECMAScript 2024 (ES15)**, jährliche Releases **Browser-Kompatibilität:** - Faustregel: **ES2017+** läuft in allen modernen Browsern - Ältere Targets via Transpiler (Babel, esbuild, swc, tsc) - Kompatibilitätstabelle: [kangax.github.io/compat-table](https://kangax.github.io/compat-table/) --- # JavaScript Grundlagen ```javascript // Variablen let name = "Welt"; const alter = 25; // Funktionen function gruss(name) { return `Hallo, ${name}!`; } // Arrow Functions const add = (a, b) => a + b; // Arrays const arr = [1, 2, 3]; arr.map(x => x * 2); // [2, 4, 6] ``` --- # DOM Manipulation ```javascript // Element auswählen const title = document.querySelector('h1'); // Inhalt ändern title.textContent = 'Neue Überschrift'; // Event Listener button.addEventListener('click', () => { alert('Geklickt!'); }); ``` --- # Fetch API ```javascript fetch('/api/products') .then(res => res.json()) .then(data => { console.log(data); }) .catch(err => console.error(err)); ``` --- # Async/Await ```javascript async function loadProducts() { try { const res = await fetch('/api/products'); const data = await res.json(); return data; } catch (err) { console.error('Fehler:', err); } } ``` ---  --- # Web Engineering Mandala Interaktive version: [nextlevelshit.github.io/web-engineering-mandala](https://nextlevelshit.github.io/web-engineering-mandala/) 3 Schichten: - **Core Layer** — JS, HTML, CSS (vanilla) - **Build Layer** — bundlers, runtimes, template engines, pre/post processors - **Application Layer** — frontend, backend, frameworks, SSR, CSS-utilities 3 Segmente: HTML (blau) · JavaScript (rot) · CSS (grün) · Mittelpunkt: `package.json` --- # JavaScript Frameworks – Kategorien | Kategorie | Beispiele | |-----------|-----------| | **CSS Frameworks** | Tailwind, Bootstrap, shadcn/ui | | **Frontend Frameworks** | React, Vue, Svelte, Astro | | **Rendering / Meta** | Next.js, Nuxt, Gatsby | | **Build Tools / Bundler** | Webpack, Vite, Parcel, esbuild | | **Backend Frameworks** | Express, Fastify, NestJS | --- # Vanilla JS – Counter ```html ``` **Pro:** hohe Kompatibilität, simpel **Contra:** State-Management und Re-Rendering werden schnell komplex --- # React – Counter (JSX)  ```jsx import { useState } from "react"; function MyButton() { const [count, setCount] = useState(0); return ( ); } ``` - **Component-Based** Architecture - **Virtual DOM**, JSX, Hooks - großes Ökosystem (React Router, Redux, …) --- # Vue 3 – Composition API  ```vue ``` - **Reactive Data Binding** - Single-File Components (`.vue`) - Vue Router, Pinia (State) --- # Svelte – Counter  ```svelte ``` - **Compiler-Based** – kein Runtime-Framework - Reactive Assignments (`let`) - Built-in Animationen --- # Astro – Content-First  ```astro --- const greeting = "Hallo DHBW"; ---