63
Rami Sayar - @ramisayar Senior Technical Evangelist Microsoft Canada @RAMISAYAR

An Intense Overview of the React Ecosystem

Embed Size (px)

Citation preview

Page 1: An Intense Overview of the React Ecosystem

Rami Sayar - @ramisayar

Senior Technical Evangelist

Microsoft Canada

@RAMISAYAR

Page 2: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 4: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 5: An Intense Overview of the React Ecosystem

• Introduction to React & the Environment• Useful React Libraries• What is Flux & Redux• Useful Redux Libraries• What is Relay (and other Reactive Databases/APIs)• Useful React Dev Tools

Assumption: Beginner React Developer

@RAMISAYAR

Page 6: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 7: An Intense Overview of the React Ecosystem

• React is a UI *library* developed at Facebook.

• Lets you create interactive, stateful & reusable UI components.

@RAMISAYAR

Page 8: An Intense Overview of the React Ecosystem

• React adds this weird thing to your HTML called JSX.

• Let’s you write HTML-ish tags in JavaScript to simplify creating components.

var HelloWorldComponent = React.createClass({

render: function(){

return ( <h1>Hello, world!</h1> );

}

});

@RAMISAYAR

React.createElement('h1', null, 'Hello, world!')

Page 9: An Intense Overview of the React Ecosystem

• Added attributes are called props and can be used to render dynamic data.

var HelloNameComponent = React.createClass({

render: function(){

return ( <h1>Hello, {this.props.name}!</h1> );

}

});

ReactDOM.render(<HelloNameComponent name="Rami"

/>, document.getElementById('app'));

@RAMISAYAR

Page 10: An Intense Overview of the React Ecosystem

• Render method is the only required spec for creating a component.

• React has lifecycle methods:• componentWillMount – Invoked once, on both client & server before

rendering occurs.

• componentDidMount – Invoked once, only on the client, after rendering occurs.

• shouldComponentUpdate – Return value determines whether component should update.

• componentWillUnmount – Invoked prior to unmounting component.

@RAMISAYAR

Page 11: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 12: An Intense Overview of the React Ecosystem

• Every component has a state object and a props object.

• Functions & Objects:• getInitialState – Return value is the initial value for state.

• setState – Sets the state and triggers UI updates.

• getDefaultProps – Sets fallback props values if props aren’t supplied.

@RAMISAYAR

Page 13: An Intense Overview of the React Ecosystem

• Every component has a state object and a props object.

• Data flows unidirectionally via the state and props objects.

@RAMISAYAR

Page 14: An Intense Overview of the React Ecosystem

• React can be used on both the client and server side.

• Uses a Virtual DOM to selectively render subtrees of components on state change.

• To assign CSS classes you have to use className.

• You can use ES6 Classes instead of the createClass function.

@RAMISAYAR

Page 15: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 16: An Intense Overview of the React Ecosystem

Create React apps with no build configuration.

npm install -g create-react-app

create-react-app my-app

cd my-app/

npm start

@RAMISAYAR

Page 17: An Intense Overview of the React Ecosystem

• Webpack

• Babel with ES6 extensions ( JSX, object spread, class properties)

• Autoprefixer

• ESLint

• Jest

@RAMISAYAR

Page 18: An Intense Overview of the React Ecosystem

@RAMISAYAR

$ npm install --save-dev babel-cli babel-preset-

latest babel-preset-react

Adds ES2015-7 language features to JavaScript.

Page 19: An Intense Overview of the React Ecosystem

• Websites are complex and there are multiple styles for bundling JavaScript code (CommonJS, AMD, ES6, etc).

• Webpack takes modules with dependencies and generates static assets.

@RAMISAYAR

Page 20: An Intense Overview of the React Ecosystem

@RAMISAYAR

• Webpack also comes with a few interesting features:• Hot Module Replacement

• Development Server

• Optimization

• Caching

Page 21: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 22: An Intense Overview of the React Ecosystem

• React Router keeps your UI in sync with the URL.

• Features like lazy code loading, dynamic route matching, and location transition handling are built in.

render((<Router history={browserHistory}><Route path="/" component={App}><Route path="about" component={About}/><Route path="*" component={NoMatch}/>

</Route></Router>

), document.body)

@RAMISAYAR

Page 23: An Intense Overview of the React Ecosystem

• react-bootstrap wraps Bootstrap into React Components.

var buttonGroupInstance = (

<ButtonGroup>

<DropdownButton bsStyle="success" title="Dropdown">

<MenuItem key="1">Dropdown</MenuItem>

</DropdownButton>

<Button bsStyle="info">Hello</Button>

</ButtonGroup>

);

@RAMISAYAR

Page 24: An Intense Overview of the React Ecosystem

“Foundation Apps is a new framework for building web apps. It has awesome new features like flexbox based grid, motion-ui, and several core components for building web apps.” https://github.com/akiran/react-foundation-apps

@RAMISAYAR

Page 25: An Intense Overview of the React Ecosystem

• Elemental UI is a UI Toolkit for React.js Websites and Apps

@RAMISAYAR

Page 26: An Intense Overview of the React Ecosystem

“This is a collection of some of the most reusable React components built at Khan Academy. […] We're trying to make it just as easy to jumpstart React applications with a well-tested, thoughtful, and beautiful library of components.” http://khan.github.io/react-components/

@RAMISAYAR

Page 27: An Intense Overview of the React Ecosystem

Unresolved topic but check out: FormidableLabs/radium

@RAMISAYAR

Page 28: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 29: An Intense Overview of the React Ecosystem

@RAMISAYAR

• React makes it easy to build reuseable and composable components (a.k.a. Views). • React discourages bidirectional communication for the above to be true.• This conflicts with MVC where Controller-View communication is bidirectional.

Page 30: An Intense Overview of the React Ecosystem

• Flux is the architecture that Facebook uses for building client-side web apps.

• Flux doesn’t follow MVC in favor of a unidirectional data flow.

• Flux architecture is composed of four major parts: Dispatchers, Stores, Views and Actions.

@RAMISAYAR

Page 32: An Intense Overview of the React Ecosystem

• Dispatchers are the central hubs that manage data flow (actions). • Essentially registry of callbacks into Stores.

• When Actions passed into the central Dispatcher, they are redistributed to the Stores.

• Dispatchers manage dependencies between Stores.

• Stores contain the application state and logic (sort of like the Model in MVC)• Stores register themselves with the Dispatcher to receive Actions via a

callback.

• Actions describe state changes in the Store.

• Stores broadcast an event saying they have changed so Views can update.

@RAMISAYAR

Page 33: An Intense Overview of the React Ecosystem

• Views are the React Components.• React Components are composable and are typically nested in a tree

hierarchy.

• A special “App View” behaves like a controller-view and provides glue code to propagate states down the chain.

• Events cause Views to request the State from a Store to setState() so that render() will be executed.

• Actions describe a change and include a payload of data.

@RAMISAYAR

Page 34: An Intense Overview of the React Ecosystem

• Several Different Implementations of Flux:• Flux by Facebook

• Redux by Dan Abramov• Alt by Josh Perez

• Reflux by Mikael Brassman

• Fluxxor by Michelle Tilley

@RAMISAYAR

Page 35: An Intense Overview of the React Ecosystem

• The whole state of your app is stored in an object tree inside a single store.

• The only way to change the state tree is to emit an action, an object describing what happened.

• To specify how the actions transform the state tree, you write pure reducers.

Source: https://github.com/reactjs/redux

@RAMISAYAR

Page 36: An Intense Overview of the React Ecosystem

• Flux by Facebook

@RAMISAYAR

Page 37: An Intense Overview of the React Ecosystem

Use react-router-redux to sync routing state with your Redux stores.

Awesome Redux List

@RAMISAYAR

Page 38: An Intense Overview of the React Ecosystem

• reselect is a selector library for Redux

• Compute derived data => reduces size of the state object in Redux

• Efficient way to handle computing derived data => don’t recompute state if arguments didn’t change.

• Selectors are composable.

@RAMISAYAR

Page 39: An Intense Overview of the React Ecosystem

• Immutable.js provides immutable collections and data structures. • Immutable: Once created, cannot be altered at another point.

• Persistent: Both original and mutated collections are valid.

• Structural Sharing: New collections are created using the same structure as the original collection to reduce copying and achieve space/performance efficiencies.

• List, Stack, Map, OrderedMap, Set, OrderedSet and Record.

• Use in combination with Redux -> https://github.com/gajus/redux-immutable

@RAMISAYAR

Page 40: An Intense Overview of the React Ecosystem

• Flux Standard Action is a human-friendly standard for Flux action objects.

• Action objects must be plain JavaScript objects and have a type property.

• They can also have an error, payload and a meta property.

• Use with:• redux-actions - a set of helpers for creating and handling FSA actions

in Redux.

• redux-promise - Redux promise middleware that supports FSA actions.

@RAMISAYAR

Page 41: An Intense Overview of the React Ecosystem

• Redux Thunk middleware allows you to write action creators that return a function instead of an action.

• Thunk can be used to delay the dispatch of an action, or to dispatch only if a certain condition is met.

• Helps you to have asynchronicity in your action creators e.g. so you can perform API calls, etc.

@RAMISAYAR

Page 42: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 43: An Intense Overview of the React Ecosystem

• Relay is a JavaScript Framework for Building Data-Driven React Applications by Facebook. • Declarative: Use GraphQL to declare data requirements and let Relay

figure out how and when to fetch data.

• Colocation: Queries live next to views. Relay aggregates queries for network efficiencies.

• Mutations: Relay lets you mutate data on the client and server using GraphQL.

@RAMISAYAR

Page 44: An Intense Overview of the React Ecosystem

• Falcor is a JavaScript library for efficient data fetching by Netflix.• One Model Everywhere: Represent remote data as a JSON graph. Treat

data the same everywhere (in memory, client, network, etc).

• Data is the API: JavaScript-like path syntax to access data. Retrieve data using JavaScript operations like get, set, and call.

• Bind to the Cloud: Falcor automatically traverses references in your graph and makes requests as needed. Falcor transparently handles and aggregates requests for network efficiencies.

@RAMISAYAR

Page 45: An Intense Overview of the React Ecosystem

• React Resolver lets you define data requirements per-component and will handle the nested, async rendering on both the server & client for you.

@resolve("user", function(props) {

return http.get('/api/users/${props.params.userId}');

})

class UserProfile extends React.Component {

render() { ...

@RAMISAYAR

Page 46: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 47: An Intense Overview of the React Ecosystem

• Adds a new tab titled "React" in your Chrome DevTools.

• Shows list of the React Component hierarchy.

@RAMISAYAR

Page 48: An Intense Overview of the React Ecosystem

• Lets you inspect every state and action payload.

• Lets you go back in time by “cancelling” actions.

• If you change the reducer code, each “staged” action will be re-evaluated.

• If the reducers throw, you will see during which action this happened, and what the error was.

@RAMISAYAR

Page 49: An Intense Overview of the React Ecosystem

• babel-plugin-react-transform wraps React components with arbitrary transforms. In other words, it allows you to instrument React components in any way—limited only by your imagination.• react-transform-hmr - enables hot reloading using HMR API

• react-transform-catch-errors - catches errors inside render()

• react-transform-debug-inspector - renders an inline prop inspector

• react-transform-render-visualizer - highlight components when updated

@RAMISAYAR

Page 50: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 51: An Intense Overview of the React Ecosystem

• insin/nwb - Create React apps, components, libraries and other npm modules for use on the web with no configuration (until you need it).

• mozilla/neo - Neo bakes in the best-of-the-bunch configurations and setup to make developing React-based sites quicker and easier.

• NYTimes/kyt - Every sizable JavaScript web app needs a common foundation: a setup to build, run, test and lint your code. kyt is a toolkit that encapsulates and manages the configuration for web apps.

@RAMISAYAR

Page 52: An Intense Overview of the React Ecosystem

• MERN is the easiest way to build universal JavaScript apps using React and Redux.

• MERN Starter - A powerful boilerplate project that gives you a solid head start on building universal React apps.

• MERN cli - A command line utility that enables you to work with your MERN based projects easily by providing powerful code generation and scaffolding abilities.

@RAMISAYAR

Page 53: An Intense Overview of the React Ecosystem

• React Starter Kit is an opinionated boilerplate for web development built on top of Facebook's React library, Node.js / Express server and Flux architecture.

• Containing modern web development tools such as Webpack, Babel and Browser Sync.

@RAMISAYAR

Page 54: An Intense Overview of the React Ecosystem

• A static website starter kit powered by React.js and Webpack.✓ Generates static .html pages from React components

✓ Generates routes based on the list of files in the /pages folder

✓ Next generation JavaScript with Babel

✓ Sass syntax for CSS via postCSS and precss

✓ Development web server with BrowserSync and React Transform

✓ Bundling and optimization with Webpack

✓ Yeoman generator (generator-react-static)

@RAMISAYAR

Page 55: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 56: An Intense Overview of the React Ecosystem

• React Native by Facebook enables you to build on native platforms using JavaScript and React.

• React Native focuses on developer efficiency — learn once, write anywhere.

• Supports iOS and Android.

@RAMISAYAR

Page 57: An Intense Overview of the React Ecosystem

• Use standard platform components such as UITabBar on iOS and Drawer on Android.

• Apps have a consistent look and feel with the rest of the platform ecosystem and have native performance.

• Operations between JavaScript and the native platform are performed asynchronously.

• Communication is fully serializable, allows you to debug the JavaScript while running the complete app, either in the simulator or on a physical device.

@RAMISAYAR

Page 58: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 59: An Intense Overview of the React Ecosystem

• Introduced React & the Ecosystem

• What is Flux Architecture• Flux, Redux, Alt.js, etc.

• Introduced React Libraries and UI Component Libraries

• Introduced Relay, Falcor & React Resolver

• Introduced React Native

• Useful React Dev Tools

@RAMISAYAR

Page 60: An Intense Overview of the React Ecosystem

@RAMISAYAR

Page 61: An Intense Overview of the React Ecosystem

tw: @ramisayar | gh: @sayar

@RAMISAYAR

Page 62: An Intense Overview of the React Ecosystem

• https://www.toptal.com/react/navigating-the-react-ecosystem

• https://github.com/enaqx/awesome-react

• https://github.com/facebook/react/wiki/Complementary-Tools

• http://slides.com/cguedes/a-tour-on-react-ecosystem

@RAMISAYAR

Page 63: An Intense Overview of the React Ecosystem

©2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, Office, Azure, System Center, Dynamics and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.