Slides: https://djcordhose.github.io/spa-workshop/2020_arch.html
Zitate
Dies gilt nur fĂŒr die App, der Web Player ist seit einiger Zeit als React-Monolith gebaut: http://labs.spotify.com/2019/03/25/building-spotifys-new-web-player/
Apps nur gleichzeitig dargestellt, aber nicht komplett integriert
unterschiedliche Technologien, jede App wird anders dargestellt
Wechsel der App dauert (Service Workers können die Zeit ab 2. Aufruf vermindern)
Umstellung auf React fortlaufend
Keine architekturbedingten UX Probleme
Was wĂ€ren Kandidaten fĂŒr Smart-/Dumb-Components?
Besonders bei wachsenden und langlebigen Anwendungen
Welche Daten braucht man minimal zur Darstellung?
Implementierungen existieren fĂŒr alle wichtigen UI-Frameworks
type Greeting = {
greeting: string;
name: string;
}
type SaveGreetingAction = {
type: 'ADD_GREETING',
greeting: Greeting
}
function greetingsReducer(state: Greeting[] = [],
action: SaveGreetingAction) {
switch (action.type) {
case 'ADD_GREETING':
// immutable operation, creating new state
return [...state, action.greeting];
default:
return state;
}
}
async function loadGreetings(dispatch) {
try {
const response = await fetch(BACKEND_URL);
const json = await response.json();
dispatch({
type: SET_GREETINGS,
greetings: json
});
} catch (err) {
console.error('LOADING GREETINGS FAILED:', err)
}
}
Wieder nur eine Funktion, der einzige Ort an dem asynchrone Operationen erlaubt sind
Ein UI-Muster fĂŒr Benutzerschnittstellen
Anders Hejlsberg@Build2016: Big JavaScript codebases tend to become "read-only".
// variables can have type information
let foo: string;
foo = 'yo';
// Error: Type 'number' is not assignable to type 'string'.
foo = 10;
// types can be inferred (return type)
function sayIt(what: string) {
return `Saying: ${what}`;
}
const said: string = sayIt(obj);
class Sayer {
what: string; // mandatory
constructor(what: string) {
this.what = what;
}
// return type if you want to
sayIt(): string {
return `Saying: ${this.what}`;
}
}
https://www.typescriptlang.org/