Presentation is loading. Please wait.

Presentation is loading. Please wait.

Olmo de Corral Signum Framework Developer #olmocc React.

Similar presentations


Presentation on theme: "Olmo de Corral Signum Framework Developer #olmocc React."— Presentation transcript:

1 www.controlexpert.comwww.signumframework.comwww.signumsoftware.com Olmo de Corral Signum Framework Developer #olmocc olmo@signumsoftware.com React

2 A little bit of (my) History Logic C# SQL Entities C# WCF Views XAML Scripts C# Logic C# SQL Templates CSHTML Scripts JavaScript jQuery HTML FORM DATA Logic C# SQL Entities C#/JSON Views ?? Scripts TypeScript TypeScript

3 Searching for a JS Framework

4

5 Model View Controller Just Render Components™ Whatever Reactive

6 The Web

7 JSX Basics

8 JSX Advanced

9 Custom Components Intrinsic HTML Elements  In lowercase React Components  In Uppercase

10 PersonControl Two-Way Databinding Person Name: “John” DateOfBirth: 1984-10-13 InputControl Value: “John” DateTimePicker SelectedDate: 1984-10-13 OnChange

11 PersonControl Unidirectional Data Flow DateTimePicker SelectedDate: 1984-10-13 Person Name: “John” DateOfBirth: 1984-10-13 Value: “John” InputControl OnChange Render

12 DEMO 1: Person Component  Handling Events  Be careful with this !  ForceUpdate

13 Props vs State Props  Public  Read-only Recommended State  Private  Modifiable Only if needed (a.k.a. Parameters)

14 DEMO 2: DateTimePicker  Props vs State  SetState

15 Virtual DOM  FAST (javascript objects)  Recursive Tree  Contains:  Instances of React Components and HTML elements Native DOM  SLOW (layout & render)  Complete Native Tree  Contains:  Real DOM nodes of HTML elements render()  FAST (React Elements)  Shallow Tree  Contains:  ReactElement(‘div’)  ReactElement(DateTime Picker) Person Control input DateTime Picker div render() Person Control input DateTime Picker div input button ul li input div input button ul li Diff Algorithm Batch Changes

16 Diff Algorithm Fast and Straightforward Level by Level http://calendar.perfplanet.com/2013/diff/ Comparing Lists Comparing Nodes Batching Sub-tree Rendering shouldComponentUpdate

17 DEMO 3: React Developer Tools

18 Component API

19 GRADUATED IN REACT!!! …but

20 Just the V in MVC…  Language elm  Module System  CommonJS (Node)  AMD (Require.js)  UMD  ES6 Modules  Build  Bundle  CSS Preprocessor  CSS Framework AtScript

21 React + Typescript

22 Popular Javascript Frameworks

23 Popular To-Javascript Languages

24 React + Typescript + Angular

25 React + Typescript

26 TSX = TS + JSX  Typescript 1.6  Full JSX support  Strongly typed  Props vs State  Spread operator  New as operator for casting  Two outputs: preserve / react  BUG: Formatting Problems  Typescript 1.8  Syntax coloring  Stateless Function Components  Simplified props  Custom JSX Factories  BUG: Auto-completion problems  Flow analysis (return)  Lack of import auto-complete

27 React Ecosystem (Tested)

28  Lots of plugins and loaders  Typescript / Babel / CoffeeScript  CSS / LESS / SASS  Customize bundles  Uglyfx  Notify  Solves the whole bundling problem  Follows JS require / import  Sync and Async dependencies  Styles, fonts and other assets  Hash & Cache Invalidation  --watch mode  Tricky to configure  Black box WebPack Task Runner for Visual Studio 2015... useful?

29  Associates Components with URLs  Using JSX!  Cumbersome API with many breaking changes  History repository needed?  Incomplete Typescript definition files (.d.ts) keeps your UI in sync with the URL https://github.com/reactjs/react-router

30 React-Bootstrap  Good documentation  Very Complete (Modals, Tabs, Tooltips)  Too much? (Button, MenuItem)  Overlays repository need?  Incomplete Typescript definition files (.d.ts) The most popular front-end framework, rebuilt for React. https://react-bootstrap.github.io/

31 React Widgets  Good documentation  High quality components  Dropdown / Combobox  Date-Time picker  No definition files (I built my own) offers a set of html form inputs, built from scratch with React https://jquense.github.io/react-widgets/docs

32 React Ecosystem (Untested)

33 Server-Side Rendering Person input DateTime Picker div input button input div input button Batch Changes Person input DateTime Picker div input button Generate HTML String /div> Browser Server ul li ul li ? ✓

34 ReactJS.NET makes it easier to use Facebook's React and JSX from C# and other.NET languages, focusing specifically on ASP.NET MVC (although it also works in other environments).ReactJSX  On-the-fly JSX to JavaScript compilation  JSX to JavaScript compilation via popular minification/combination libraries  Server-side component rendering  Typescript support? bundles.Add(new JsxBundle("~/bundles/main").Include("~/Scripts/HelloWorld.jsx")) @Html.React("CommentsBox", new { initialComments = Model.Comments })

35 React Hot Loader will keep it mounted, preserving the state. http://gaearon.github.io/react-hot-loader/ Works on IIS?

36 React Native A FRAMEWORK FOR BUILDING NATIVE APPS USING REACT  Native Components  Asynchronous Execution  Touch Handling  Flexbox and Styling  Extensibility

37 Flux Implementations Materil Flux Fluxette Freezer Fluxury Fluxy Reflux Flummox Marty.js McFly Delorean Lux

38 Signum.React

39 Logic C# SQL Entities C# WCF Views XAML Scripts C# Logic C# SQL Templates CSHTML Scripts JavaScript jQuery HTML FORM DATA Logic C# SQL Entities C#/JSON Views TSX Scripts TypeScript TypeScript Signum Framework UIs

40 Entities Enums Messages … Entities Enums Messages … T4S Code-generation with templates REST - JSON Metadata Translations Permissions Busines Logic API Contollers React Components Server-Side Client-Side Run-Time Compile-Time

41 DEMO 4: Signum.React

42 Entities Enums Messages … Entities Enums Messages … T4S Code-generation with templates Metadata Translations Permissions Busines Logic API Contollers React Components Server-Side Client-Side Run-Time Compile-Time 1-Time Code Generation 80% Code Converted cshtml

43 Conclusion 1. React is Awesome  Simplicity  Expressivity  Performance  … but incomplete 1. React + Typescript is even better  Compile-time checked  Auto completion  Safe renames ...missing.d.ts 3. Big Ecosystem  Webpack  React Bootstrap  React Widgets  React Router 4. You may need server-side solution  Auto-generate definition files from C#  Expose meta-data with reflection  Facilitate migration  React Native  React.Net  React Hot Loader  …

44 THE END Olmo de Corral Signum Framework Developer #olmocc olmo@signumsoftware.com www.controlexpert.com www.signumframework.com www.signumsoftware.com


Download ppt "Olmo de Corral Signum Framework Developer #olmocc React."

Similar presentations


Ads by Google