Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JS Application Development Part 1 - ES 2015 / Redux

Sitegeist
May 17, 2016
69

JS Application Development Part 1 - ES 2015 / Redux

Talk by André König

Sitegeist

May 17, 2016
Tweet

Transcript

  1. Eine brandneue Programmiersprache ECMAScript-Features im MySysmex Projekt Das ungeliebte Kind:

    Der Build-Prozess Kleiner Exkurs. Warum ist dieser Prozess überhaupt notwendig? "It's all about state handling" Einblick in das State-Handling mit Redux – dem sogenannten predictable state container für JavaScript-basierte Applikationen. Dieser Part behandelt die Basic-Prinzipien von Redux. Part 1
  2. Advanced Redux Fortgeschrittene Aspekte im Redux-Kontext. Handling von Seiteneffekten mittels

    Redux Sagas, etc. Part 2 React Einstieg in die View-Layer Implementierung, die innerhalb des MySysmex Projektes eingesetzt wird.
  3. WOW! WOW! JavaScript JavaScript sieht nun wie eine sieht nun

    wie eine richtige richtige Programmier- Programmier- sprache aus. sprache aus. – Leute
  4. Variables and Scoping Classes Destructuring Modules Arrow Functions Default Values

    Object Spread Generators* Template Strings Spread Operator
  5. // Good ol' ES5-Variablen var foo = 'bar'; // Problem:

    Variablen "Hoisting" var zoo = 'baz'; function doSomething() { console.log(zoo); // undefined var zoo = 'haha ...'; } doSomething();
  6. // `let` hilft gegen das Hoisting von Variablen console.log(zoo); //

    Uncaught TypeError zoo is undefined let zoo = 'haha ...';
  7. // `const` const foo = 'bar'; foo = 'zoo'; //

    Uncaught TypeError: Assignment to constant variable. // // ABER!!!! // // Dies gilt nur für primitive Datentypen (string, number, boolean) nicht // für den "Inhalt" von Objekten (object, array). // const person = { name: 'André König' }; person.name = 'Hans Wurst'; // Erlaubt person = {foo: 'bar'}; // Uncaught TypeError: Assignment to constant variable.
  8. // // ES5 // // // Objekte // var person

    = { name: 'André König', age: 30 }; var name = person.name; var age = person.age; console.log(name); // André König console.log(age); // 30 // // Arrays // var randomNumbers = [10, 9, 1, 2, 5]; var ten = randomNumbers[0]; var nine = randomNumbers[1];
  9. // // Object destructuring // const person = { name:

    'André König', age: 30 }; const {name, age} = person; console.log(name); // André König console.log(age); // 30 // Aliasing const {name: daName} = person; console.log(daName); // André König // // Array destructuring // const randomNumbers = [10, 9, 1, 2, 5]; const [ten, nine] = randomNumbers; console.log(ten); // 10 console.log(nine); // 9
  10. // // ES5 // function doSomething(a, b, c) { b

    = b || 'ein B'; c = c || 'ein C'; console.log(a, b, c); } doSomething('ein A');
  11. // // Default Values in ES2015 // function doSomething(a, b

    = 'ein B', c = 'ein C') { console.log(a, b, c); } doSomething('ein A');
  12. // // ES5 // const firstName = 'André'; const lastName

    = 'König'; console.log('Seems like your name is ' + firstName + ' ' + lastName);
  13. // // ES2015 // const firstName = 'André'; const lastName

    = 'König'; console.log(`Seems like your name is ${firstName} ${lastName}`); function onePlus(something) { return 1 + something; } console.log(`Look ma, a calculation ${onePlus(1)}!`);
  14. // // ES5 // // Base "class" function Wheeler() {}

    // The car "class" function Car(color) { Wheeler.call(this); this.color = color; } Car.prototype = Object.create(Wheeler.prototype); Car.prototype.moep = function moep() { console.log('Moep!!! I\'m a ' + this.color + ' car.'); }; var car = new Car('red'); car.moep();
  15. // // ES2015 // // Base "class" class Wheeler {

    } // The car "class" class Car extends Wheeler { constructor(color) { super(); this.color = color; } moep() { console.log('Moep!!! I\'m a ' + this.color + ' car.'); } } const car = new Car('red'); car.moep();
  16. // // ES5 // function Car() { this.name = 'Smart';

    } Car.prototype.doSomething = function doSomething() { var self = this; http.get('/get-ps', function onResponse(ps) { var message = 'A ' + self.name + ' with ' + ps + ' PS'; console.log(message); }); };
  17. // // ES2015 // class Car { constructor() { this.name

    = 'Smart'; } doSomething() { http.get('/get-ps', (ps) => { const message = `A ${this.name} with ${ps} PS`; console.log(message); }); } }
  18. // // ES2015 // const filter = (anArray) => {

    return anArray.filter((item) => { return item === 'foo'; }); }; const items = ['zoo', 'bar', 'foo']; const result = filter(items); // ['foo']
  19. // Kürzer const filter = anArray => anArray.filter(item => item

    === 'foo' ); const items = ['zoo', 'bar', 'foo']; const result = filter(items); // ['foo'] 1 1 Runde Klammern können bei einem Argument entfernt werden 2 2 Beinhaltet der Funktionsrumpf nur eine Anweisung, so kann auf die geschweiften Klammern sowie das return Statement verzichtet werden.
  20. // // ES5 // window.sitegeist = window.sitegeist || {}; window.sitegeist.MyModule

    = (function () { var doSomething = function doSomething() { console.log('I\'m doing something.'); }; return { doSomething: doSomething }; })(); var myModule = window.sitegeist.MyModule; myModule.doSomething();
  21. // // ES2015 // // // MyModule.js // const doSomething

    = () => console.log(`I'm doing something.`); export { doSomething }; // // App.js // import {doSomething} from './MyModule'; doSomething();
  22. // // ES2015 // // // Car.js (with default export)

    // class Car { // ... } export default Car; // // App.js // import Car from './Car'; const car = new Car();
  23. // // ES5 // var arr0 = ['green', 'red']; var

    arr1 = ['yellow', 'blue']; var result = [].concat(arr0, arr1, ['black', 'gray']);
  24. // // ES2015 // const arr0 = ['green', 'red']; const

    arr1 = ['yellow', 'blue']; const result = [...arr0, ...arr1, 'black', 'gray'];
  25. // // ES5 // function copy(person) { var result =

    {}; Object.keys(person).forEach(function (key) { result[key] = person[key]; }); return result; } var person = { name: 'André König', age: 20 }; var copiedPerson = copy(person); console.log(person === copiedPerson); // false
  26. // // ES2015 // var person = { name: 'André

    König', age: 20 }; var copiedPerson = Object.assign({}, person); console.log(person === copiedPerson); // false
  27. // // ES**** – Object Spread // var person =

    { name: 'André König', age: 20 }; var copiedPerson = { ...person }; console.log(person === copiedPerson); // false
  28. Variables and Scoping Classes Destructuring Modules Arrow Functions Default Values

    Object Spread Generators* Template Strings Spread Operator
  29. // // ES2015 // import styles from './MyComponent.css'; const Component

    = () => <div className={styles.container}>Foo</div>; export default Component;
  30. UI State User klickt auf den Logout-Button User wird ausgeloggt

    und der Status angepasst. 1 2 View aktualisieren 3
  31. Action Creators Formalisieren die Intention des Users in ein einheitliches

    "Action-Format" {type: 'THE_ACTION_TYPE', payload: {}}
  32. Reducers "Berechnen" den neuen State basierend auf einer Action y

    = f(x) Pure Function! const state = reducer(currentState, action);
  33. UI Action Creator Store Reducers 1 click 2 dispatch(action) 3

    (currentState, action) 4 newState 5 state