react - bonn-to-code.netbonn-to-code.net/files/downloads/2016/20160322_reacttypescript.pdf · react...

44
www.controlexpert.com www.signumframework.com www.signumsoftware.com Olmo de Corral Signum Framework Developer #olmocc [email protected] React

Upload: others

Post on 03-Jun-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

www.controlexpert.comwww.signumframework.comwww.signumsoftware.com

Olmo de Corral

Signum Framework Developer#olmocc [email protected]

React

Page 2: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

A little bit of (my) History

Logic

C# SQL

Entities

C# WCF

Views

XAML

Scripts

C#

Logic

C# SQL

Templates

CSHTML

Scripts

JavaScript

jQuery

HTM

L

FO

RM

DATA

Logic

C# SQL

Entities

C#/JSON

Views

??

Scripts

TypeScriptTypeScript

Page 3: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Searching for a JS Framework

Page 4: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Searching for a JS Framework

Page 5: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Searching for a JS Framework

Model

View

Controller

Just

Render

Components™

Reactive

Page 6: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

The Web

Page 7: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

JSX Basics

Page 8: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

JSX Advanced

Page 9: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Custom Components

Intrinsic HTML Elements

In lowercase

React Components

In Uppercase

Page 10: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

PersonControl

Two-Way Databinding

Person

Name: “John”

DateOfBirth: 1984-10-13

InputControl

Value: “John”

DateTimePicker

SelectedDate: 1984-10-13

OnChange

Page 11: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

PersonControl

Unidirectional Data Flow

DateTimePicker

SelectedDate: 1984-10-13

Person

Name: “John”

DateOfBirth: 1984-10-13

Value: “John”

InputControl

OnChange

OnChange

Render

Page 12: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

DEMO 1:

Person Component

Handling Events

Be careful with this!

ForceUpdate

Page 13: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Props vs State

Props

Public

Read-only

Recommended

State

Private

Modifiable

Only if needed

(a.k.a. Parameters)

Page 14: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

DEMO 2:

DateTimePicker

Props vs State

SetState

Page 15: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Virtual DOM

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

div

inputbutton ul

li li

input

div

div

input button ul

li li

Batch Changes

Page 16: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Diff Algorithm Fast and Straightforward

Level by Level

http://calendar.perfplanet.com/2013/diff/

Comparing Lists

Comparing Nodes

Batching

Sub-tree Rendering

shouldComponentUpdate

Page 17: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

DEMO 3:

React Developer Tools

Page 18: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Component API

Page 19: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

GRADUATED IN REACT!!!

…but

Page 20: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Just the V in MVC…

Language

elm

Module System

CommonJS (Node)

AMD (Require.js)

UMD

ES6 Modules

Build Bundle

CSS Preprocessor CSS FrameworkAtScript

Page 21: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

React + Typescript

Page 22: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Popular Javascript Frameworks

Page 23: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Popular To-Javascript Languages

Page 24: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

React + Typescript + Angular

Page 25: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

React + Typescript

Page 26: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

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

Page 27: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

React Ecosystem

(Tested)

Page 28: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

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?

Page 29: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

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

Page 30: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

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/

Page 31: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

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

Page 32: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

React Ecosystem

(Untested)

Page 33: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Server-Side Rendering

Person

input DateTime

Picker

div

div

inputbutton

input

div

div

input button

Batch Changes

Person

input DateTime

Picker

div

div

inputbutton

Generate

HTML String

<div>

<input/>

<div>

<input/>

<button/>

/div>

</div>

Browser

Server

ul

li li

ul

li li

?✓

Page 34: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

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).

On-the-fly JSX to JavaScript compilation

JSX to JavaScript compilation via popular

minification/combination libraries

Server-side component rendering

Typescript support?

<script src="@Url.Content("~/Scripts/HelloWorld.jsx")"></script>

bundles.Add(new JsxBundle("~/bundles/main").Include("~/Scripts/HelloWorld.jsx"))

@Html.React("CommentsBox", new { initialComments = Model.Comments })

Page 35: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

React Hot Loader will keep it mounted, preserving the state.

http://gaearon.github.io/react-hot-loader/

Works on IIS?

Page 36: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

React Native

A FRAMEWORK FOR BUILDING

NATIVE APPS USING REACT

Native Components

Asynchronous Execution

Touch Handling

Flexbox and Styling

Extensibility

Page 37: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Flux Implementations

•Materil Flux

•Fluxette

•Freezer

•Fluxury

•Fluxy

Reflux

•Flummox

•Marty.js

•McFly

•Delorean

•Lux

Page 38: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Signum.React

Page 39: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Logic

C# SQL

Entities

C# WCF

Views

XAML

Scripts

C#

Logic

C# SQL

Templates

CSHTML

Scripts

JavaScript

jQuery

HTM

L

FO

RM

DATA

Logic

C# SQL

Entities

C#/JSON

Views

TSX

Scripts

TypeScriptTypeScript

Signum Framework UIs

Page 40: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Entities

Enums

Messages

Entities

Enums

Messages

T4S

Code-generation

with templates

REST - JSON

Metadata

Translations

PermissionsBusines Logic

API ContollersReact

Components

Server-Side Client-Side

Run-T

ime

Com

pile-T

ime

Page 41: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

DEMO 4:

Signum.React

Page 42: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

Entities

Enums

Messages

Entities

Enums

Messages

T4S

Code-generation

with templates

Metadata

Translations

PermissionsBusines Logic

API ContollersReact

Components

Server-Side Client-Side

Run-T

ime

Com

pile-T

ime

cshtml

Page 43: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

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

Page 44: React - Bonn-to-Code.Netbonn-to-code.net/files/downloads/2016/20160322_ReactTypescript.pdf · React + Typescript + Angular . React + Typescript. TSX = TS + JSX ... ReactJS.NET makes

THE ENDOlmo de Corral

Signum Framework Developer #olmocc [email protected]

www.controlexpert.com

www.signumframework.com

www.signumsoftware.com