Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

An Overview of the React Ecosystem

1,268 views

Published on

An Overview of the React Ecosystem
with Rami Sayar

OVERVIEW

React has been named the front-end library to learn in 2016 however few people talk about the React without mentioning Flux (or Redux or React Native or Relay). In this talk, we will explore the ecosystem of tools and libraries that surround React. We will look at the various Flux implementations (including a short explanation of Flux) like Redux, at some of the React routing libraries, at some of the reactive database or reactive API libraries and finally at everyday tools and techniques that make the React developer happy. By the end of this talk, you will have a greater grasp of the ecosystem and leave with new tools in your developer arsenal.

OBJECTIVE

Learn about the React Ecosystem

TARGET AUDIENCE

Front-End Developers with knowledge of JavaScript, React Beginners

ASSUMED AUDIENCE KNOWLEDGE

JavaScript, Front-End Dev, Beginner React

FIVE THINGS AUDIENCE MEMBERS WILL LEARN

What is Flux?
What is Redux
What is React Native
What is Relay (and other Reactive Databases/APIs)
Useful React Dev Tools

Published in: Internet
  • ➤➤ 3 Reasons Why You Shouldn't take Pills for ED (important) ▲▲▲ https://tinyurl.com/rockhardxxx
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

An Overview of the React Ecosystem

  1. 1. Rami Sayar - @ramisayar Technical Evangelist Microsoft Canada @RAMISAYAR
  2. 2. @RAMISAYAR
  3. 3. • Introduction to React & the Ecosystem • What is Flux • What is Redux • What is Relay (and other Reactive Databases/APIs) • What is React Native • Useful React Dev Tools @RAMISAYAR
  4. 4. @RAMISAYAR
  5. 5. Level: Intermediate. Assumption: Beginner React Developer @RAMISAYAR
  6. 6. @RAMISAYAR
  7. 7. • React is a UI *library* developed at Facebook. • Lets you create interactive, stateful & reusable UI components. • React can be used on both the client and server side. • Uses a Virtual DOM to selectively render subtrees of components on state change. @RAMISAYAR
  8. 8. • 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
  9. 9. • 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
  10. 10. • 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. • mixins – An array of objects, used to extend the current component’s functionality. @RAMISAYAR
  11. 11. • React events are attached as properties and can trigger methods. • Data flows unidirectionally via the state and props objects. • React seams to rerender the whole app on every data change but really it only ends up rerendering the parts that changed. • To assign CSS classes you have to use className. • You can use ES6 Classes instead of the createClass function. @RAMISAYAR
  12. 12. @RAMISAYAR
  13. 13. • Flux is the architecture that Facebook uses for building client- side web apps. • More of a pattern rather than a framework. • 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
  14. 14. • Dispatchers are the central hubs that manage data flow. • 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
  15. 15. • 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
  16. 16. @RAMISAYAR Source: https://facebook.github.io/flux/docs/overview.html
  17. 17. • 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
  18. 18. • Flux by Facebook @RAMISAYAR
  19. 19. • “Redux evolves the ideas of Flux, but avoids its complexity by taking cues from Elm.” • “The Gist of Redux • 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
  20. 20. @RAMISAYAR
  21. 21. • 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. • Use react-router-redux to sync routing state with your Redux stores. render(( <Router history={browserHistory}> <Route path="/" component={App}> <Route path="about" component={About}/> <Route path="*" component={NoMatch}/> </Route> </Router> ), document.body) @RAMISAYAR
  22. 22. • 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. const shopItemsSelector = state => state.shop.items; const taxSelector = state => state.shop.taxPercent; const subtotalSelector = createSelector( shopItemsSelector, items => items.reduce((acc, item) => acc + item.value, 0) ) const taxSelector = createSelector( subtotalSelector, taxSelector, (subtotal, taxPercent) => subtotal * (taxPercent / 100) ) @RAMISAYAR
  23. 23. • 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. @RAMISAYAR
  24. 24. • 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
  25. 25. @RAMISAYAR
  26. 26. • 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
  27. 27. “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
  28. 28. • Elemental UI is a UI Toolkit for React.js Websites and Apps @RAMISAYAR
  29. 29. “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
  30. 30. @RAMISAYAR
  31. 31. • 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
  32. 32. • 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
  33. 33. • 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
  34. 34. @RAMISAYAR
  35. 35. • 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
  36. 36. • 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
  37. 37. @RAMISAYAR
  38. 38. • Adds a new tab titled "React" in your Chrome DevTools. • Shows list of the React Component hierarchy. @RAMISAYAR
  39. 39. • 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
  40. 40. @RAMISAYAR
  41. 41. @RAMISAYAR
  42. 42. • A cloud service that enables Cordova and React Native developers to deploy mobile app updates directly to their users’ devices. • Manage alpha, beta and production apps. • Cordova and React Native ready. • http://codepush.tools @RAMISAYAR
  43. 43. • Babel, ES2015 Compiler: https://babeljs.io/ • Special support for JSX & React • Support for extensions and plugins • Google Traceur, ES6 Compiler: https://github.com/google/traceur-compiler #WebNotWar - @RAMISAYAR
  44. 44. npm install --save-dev babel-cli • You can setup babel to watch your files and automatically compile by using Grunt & Gulp. babel ./src --out-file app.js --presets es2015 • Babel will also add any missing features for browsers that already support ES6. Babel has presets for ES7 features, React, etc. #WebNotWar - @RAMISAYAR
  45. 45. @RAMISAYAR
  46. 46. • 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
  47. 47. • 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
  48. 48. • MERN is the easiest way to build isomorphic JavaScript apps using React and Redux. • MERN is a scaffolding tool which makes it easy to build isomorphic apps using Mongo, Express, React and NodeJS. @RAMISAYAR
  49. 49. @RAMISAYAR
  50. 50. • 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
  51. 51. tw: @ramisayar | gh: @sayar @RAMISAYAR
  52. 52. • 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
  53. 53. ©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.

×