universal javascript with react

25
Universal JavaScript - React

Upload: apptension

Post on 24-Jan-2017

289 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Universal JavaScript with React

Universal JavaScript - React

Page 2: Universal JavaScript with React

_AGENDA

_AGENDA

CZĘŚĆ 00 _INTRO

CZĘŚĆ 01 _CZYM JEST UNIVERSAL JAVASCRIPT

CZĘŚĆ 02 _UNIVERSAL JAVASCRIPT I REACT

CZĘŚĆ 03 _TRANSMIT

CZĘŚĆ 04 _REDUX

CZĘŚĆ 05 _ZAGROŻENIA I PROBLEMY

Page 3: Universal JavaScript with React

- Projekty dla międzynarodowych marek - innowacje, software, web apps

- Prawie 4 lata na rynku, 40 osób na pokładzie

- Zwycięzcy Hacksummit() Global Hackathon

_INTRO

Page 4: Universal JavaScript with React

CZYM JEST UNIVERSAL JAVASCRIPT?

Page 5: Universal JavaScript with React

_CZĘŚĆ 01: CZYM JEST UNIVERSAL JAVASCRIPT

Page 6: Universal JavaScript with React

_UNIVERSAL SPA

_CZĘŚĆ 01: CZYM JEST UNIVERSAL JAVASCRIPT

Page 7: Universal JavaScript with React

_ZALETY

_CZĘŚĆ 01: CZYM JEST UNIVERSAL JAVASCRIPT

- Poprawa SEO w przypadku przeglądarek nie wspierających analizy JavaScript (Yandex, Baidu, Bing, Yahoo)

- Przyśpieszenie czasu ładowania strony- Zapobieganie FOUC (Flash of Unstyled Content)

Page 8: Universal JavaScript with React

_TECHNOLOGIE

_CZĘŚĆ 01: CZYM JEST UNIVERSAL JAVASCRIPT

- React- Transmit- Redux- Universal Angular 2

Page 9: Universal JavaScript with React

UNIVERSAL JAVASCRIPT I REACT

Page 10: Universal JavaScript with React

_WSPARCIE ZE STRONY REACT

_CZĘŚĆ 02: UNIVERSAL JAVASCRIPT I REACT

- Virtual DOM- react-dom/server- Reużywanie aplikacji

Page 11: Universal JavaScript with React

_RENDEROWANIE CLIENT-SIDE

_CZĘŚĆ 02: UNIVERSAL JAVASCRIPT I REACT

import ReactDOM from 'react-dom';import App from './app';

const reactRoot = window.document.getElementById('react-root');

ReactDOM.render(<App/>);

Page 12: Universal JavaScript with React

_RENDEROWANIE SERVER-SIDE

_CZĘŚĆ 02: UNIVERSAL JAVASCRIPT I REACT

import {Server} from 'hapi';import ReactDOM from 'react-dom/server';import App from './App';

const server = new Server();server.connection({host: 'localhost', port: '8080'});

server.ext('onPreResponse', (requst, reply) => { reply(`<html> <head></head> <body> <div id="react-root">${ReactDOM.renderToString(< App/>)}</div> </body> </html>`);});

Page 13: Universal JavaScript with React

TRANSMIT

Page 14: Universal JavaScript with React

_TRANSMIT CONTAINER

_CZĘŚĆ 03: TRANSMIT

import Transmit from 'transmit';import React, {Component} from 'react';

class App extends Component { render() { return <div>Hello {this.props.user}!</div>; }}

export default Transmit.createContainer (App, { fragments: { user: Promise.resolve('John Smith') }});

Page 15: Universal JavaScript with React

_TRANSMIT RENDER

_CZĘŚĆ 03: TRANSMIT

Transmit.render(<App/>);

Transmit.renderToString (<App/>);

Page 16: Universal JavaScript with React

REDUX

Page 17: Universal JavaScript with React

_FETCH COMPONENT DATA

_CZĘŚĆ 04: REDUX

function fetchComponentData(dispatch, components, params) { const needs = components.reduce((prev, current) => { return current ? (current. needs || []).concat(prev) : prev; }, []);

const promises = needs.map(need => dispatch(need(params)));

return Promise.all(promises);}

Page 18: Universal JavaScript with React

_PROMISE MIDDLEWARE

_CZĘŚĆ 04: REDUX

function promiseMiddleware() { return next => action => { const {promise, type, ...rest} = action; if (!promise) return next(action);

const SUCCESS = type; const REQUEST = type + '_REQUEST'; const FAILURE = type + '_FAILURE';

next({... rest, type: REQUEST});

return promise .then(res => {next({... rest, res, type: SUCCESS}); return true;}) .catch(error => {next({... rest, error, type: FAILURE}); return false;}); };}

Page 19: Universal JavaScript with React

_COMPONENT

_CZĘŚĆ 04: REDUX

class App extends Component { render() { return ( <div>Hello world!</ div> ); }

static needs = [ someAction ];}

Page 20: Universal JavaScript with React

_RENDEROWANIE SERVER-SIDE

_CZĘŚĆ 04: REDUX

import {Server} from 'hapi';import ReactDOM from 'react-dom/server';import App from './App';import store from './store';

const server = new Server();server.connection({host: 'localhost', port: '8080'});

server.ext('onPreResponse', (requst, reply) => { reply(`<html> <head></head> <body> <div id="react-root">${ReactDOM.renderToString(< App/>)}</div> </body> <script>window.__INITIAL_STATE__ = ${JSON.stringify(store.getState())}</script> </html>`);});

Page 21: Universal JavaScript with React

PROBLEMY I ZAGROŻENIA

Page 22: Universal JavaScript with React

_ZAGROŻENIA I PROBLEMY

_CZĘŚĆ 05: ZAGROŻENIA I PROBLEMY

- Zwiększenie skomplikowania architektury aplikacji- Brak window, document, etc. po stronie serwera aplikacji- Trudniejsze debugowanie- Niespójność wyrenderowanych aplikacji

Page 23: Universal JavaScript with React

_ZAGROŻENIA I PROBLEMY

_CZĘŚĆ 05: ZAGROŻENIA I PROBLEMY

Page 25: Universal JavaScript with React

DZIĘKUJĘ ZA UWAGĘ