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

A React Journey

A React Journey

The speed of innovation in the JavaScript world is insane: in a few months libraries, frameworks and tools can go from little experiments to something being used by millions of people. In this talk the attention will be focused on React, a library made by Facebook, and on the state of art of the state and data management (Redux/Mobx), testing (Enzyme), modules and syntax (Webpack/Babel) and style (CSS Modules).

Outline:

- React (Main concepts, Props, State, Component Lifecycles, Mixins, ES6 Syntax, Stateless Functional Components, High Order Components, Routing)

- State Management (Redux, Mobx)

- Testing (Enzyme)

- Webpack

- CSS Modules

Paolo Rovella

June 05, 2016
Tweet

More Decks by Paolo Rovella

Other Decks in Programming

Transcript

  1. JS Frontend Developer at LinkMe Srl Twitter: @_denb In love

    with React and Javascript in general. I’m a 7-month-old dad Daniele Bertella
  2. JS Frontend Jr Developer at LinkMe Srl Twitter: @paolorovella In

    love with React and sushi, i’m an incurable tv shows binge watcher Paolo Rovella
  3. React Main concepts Just the UI React is only concerned

    about rendering UI Virtual DOM React uses a Virtual DOM Diff implementation for ultra-high performance Data Flow React introduces one-way reactive data flow
  4. React Component Specs getInitialState() Invoked once before the component is

    mounted. The return value will be used as the initial value of this.state. getDefaultProps() Invoked once, before any instances are created. The return value will be used as the initial value of this.props. propTypes The propTypes object allows you to validate props being passed to your components
  5. React Props Input data that is passed into the component

    and can be accessed via this.props The propTypes object allows you to validate props being passed to your components PropTypes validation provided https://facebook.github.io/react/docs/reusable-components.html#prop-validation
  6. React State Internal state data A component can maintain internal

    state data (accessed via this.state) Re-render on state changes When a component's state data changes, the rendered markup will be updated by re-invoking render()
  7. React Component Lifecycles Various methods are executed at specific points

    in a component's lifecycle. https://facebook.github.io/react/docs/component-specs.html#lifecycle-methods
  8. React Mixins Share common functionality Break repetitive tasks out into

    standalone pieces optionally included within one or more components.
  9. React ECMAScript 6 (ES6) is the upcoming sixth major release

    of the ECMAScript language specification. ES6 support is different among browsers (https://kangax.github.io/compat-table/es6/) You can use ES6 today thanks to transpilers like Babel ECMAScript 6 (ES6)
  10. Babel Javascript compiler Transpile ES6/ES7 in ES5 (Classes / Destructuring

    / Arrow functions / Spread operator ...) http://babeljs.io
  11. React ES5 to ES6 Classes ECMAScript 6 equivalents in ES5

    by @addyosmani https://github.com/addyosmani/es6-equivalents-in-es5
  12. React ES6 Destructuring ES6 Arrow function Expression that make it

    possible to extract data from arrays or object into dinstinct variables Shorter syntax compared to function expressions and binds the “this” value (not its own this). They are always anonymous
  13. React ES6 Object Spread operator ES6 Decorators Copy properties from

    one object to another. The specification order is important Syntactic sugar which lets you annotate and modify classes at design time
  14. React High Order Components Reuse other components functionalities Reduce duplication

    of code Mixins Are Dead. Long Live Composition https://medium.com/@dan_abramov/mixins-are-dead-long-live-higher-order-components-94a0d2f9e750
  15. Redux By Dan Abramov (@dan_abramov) https://github.com/reactjs/redux Predictable state container for

    JavaScript apps. Three principles - Single source of truth - State is read only - Changes are made with pure functions
  16. Redux App state App state described as a plain object

    This object is like a “model” except that there are no setters
  17. Redux Actions The only way to mutate the state is

    to emit an action, an object describing what happened
  18. Redux Reducers A function that takes previous state and action

    as arguments, and returns the next state of the app Split reducers in smaller functions managing parts of the state
  19. Redux API combineReducers Combine different reducers in one createStore Two

    arguments, combined reducers and persisted state (optional)
  20. Redux subscribe Adds a change listener. Called any time an

    action is dispatched, and some part of the state tree may potentially have changed getState Returns an object with the current state tree of your application dispatch Dispatches an action. This is the only way to trigger a state change Store
  21. Provider makes the store available to all container components in

    the app only need to use it once when you render the root component Redux react-redux
  22. Redux react-redux mapStateToProps a function that tell how to transform

    the current Redux store state into the props you want to pass. mapDispatchToProps a function that receives dispatch() method and returns a callback props.
  23. Redux Middlewares Suggested way to extend Redux with custom functionality

    They are called after an action is dispatched and before it reaches the reducer Multiple middlewares can be combined together
  24. Redux Saga middleware let you create Sagas, which are generators

    responsible for orchestrating complex/asynchronous operations, to gather all your side effects logic in a central place Redux redux-thunk https://github.com/gaearon/redux-thunk Middlewares Redux Thunk middleware allows you to write action creators that return a function instead of an action The thunk can be used to delay the dispatch of an action, or to dispatch only if a certain condition is met redux-saga https://github.com/yelouafi/redux-saga
  25. MobX By Michel Weststrate (@mweststrate) https://github.com/mobxjs/mobx MobX is a library

    that makes state management simple and scalable by transparently applying functional reactive programming
  26. Functional reactive programming Functional reactive programming is programming with asynchronous

    data streams which you can listen to and react accordingly The introduction to Reactive Programming you've been missing https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
  27. MobX Store (observable/computed) @observable state observable capabilities to objects, arrays

    and class instances annotating properties with the @observable decorator @computed values that will be derived automatically when relevant data is modified
  28. @action action is anything that modify the state and is

    always triggered by some event (DOM events, websockets etc) MobX Store (action)
  29. MobX @observer observer function / decorator is used to turn

    ReactJS components into reactive components. In this component store can be passed as a prop mobx-react
  30. Enzyme By Airbnb (@airbnb) https://github.com/airbnb/enzyme Enzyme is a JavaScript testing

    utility for React. React components are easy to test because they simply return a description for what UI of the component should look like. This “description” is the “Virtual DOM” and is a tree-like data structure
  31. Enzyme Shallow is the recommended mode to start with since

    it does a better job of isolating your tests to just a single component Shallow rendering Enzyme exports three different “modes” to render and test components: shallow, mount, and render.
  32. Enzyme Enzyme Selectors can find nodes by 4 categories: CSS

    selectors React component constructor React component display name Object properties Enzyme selectors
  33. Enzyme Concise and elegant way of simulating user events, one

    of the trickier aspects of UI testing. Just pass the name of the event you want to simulate, along with any required data Event simulations
  34. Webpack Loaders Test A regular expression that matches the file

    extensions that should run through this loader (required) Include / Exclude Set which folders and files the loader should add or ignore Loader The name of the loader (required) Query Used to pass Additional options to the loader
  35. Webpack Plugins Tutorial http://www.pro-react.com/materials/appendixA Plugins have the ability to inject

    themselves into the build process to introduce custom behaviors. They do not operate like loaders on individual source files: they influence the build process as a whole.
  36. CSS Modules Concept of using a module bundler, such as

    webpack, to load CSS scoped to a particular document https://github.com/css-modules/css-modules