Top Banner
REACT NATIVE
168

React Native - Workshop

Mar 21, 2017

Download

Software

Fellipe Chagas
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: React Native - Workshop

REACT NATIVE

Page 2: React Native - Workshop

REACT NATIVEWorkshop

Page 3: React Native - Workshop

Fellipe Chagas@chagasaway

Page 4: React Native - Workshop

Ajudamos grandes empresas e startups a focarem em seu negócio

entregando tecnologia

Page 5: React Native - Workshop
Page 6: React Native - Workshop

DESENVOLVIMENTO NATIVO

Page 7: React Native - Workshop

DESENVOLVIMENTO NATIVO

Page 8: React Native - Workshop

DESENVOLVIMENTO NATIVO

Page 9: React Native - Workshop

DESENVOLVIMENTO NATIVO

Page 10: React Native - Workshop

DESENVOLVIMENTO NATIVO

Page 11: React Native - Workshop

DESENVOLVIMENTO HÍBRIDO

Page 12: React Native - Workshop

DESENVOLVIMENTO HÍBRIDO

Page 13: React Native - Workshop

DESENVOLVIMENTO HÍBRIDO

Page 14: React Native - Workshop

DESENVOLVIMENTO HÍBRIDO

Page 15: React Native - Workshop

DESENVOLVIMENTO HÍBRIDO

Page 16: React Native - Workshop

DESENVOLVIMENTO HÍBRIDO

Page 17: React Native - Workshop

DESENVOLVIMENTO HÍBRIDO

Page 18: React Native - Workshop

DESENVOLVIMENTO HÍBRIDO

Page 19: React Native - Workshop

DESENVOLVIMENTO HÍBRIDO

Page 20: React Native - Workshop

FRAMEWORKS

Page 21: React Native - Workshop

FRAMEWORKS

Page 22: React Native - Workshop

FRAMEWORKS

Page 23: React Native - Workshop

FRAMEWORKS

Page 24: React Native - Workshop

FRAMEWORKS

Page 25: React Native - Workshop

FRAMEWORKS

Page 26: React Native - Workshop

FRAMEWORKS

35.350 stars 897 contribuidores

e crescendo…

Page 27: React Native - Workshop

REACT

Page 28: React Native - Workshop

REACT

Page 29: React Native - Workshop

REACT

Page 30: React Native - Workshop

REACT

Page 31: React Native - Workshop

REACT

e milhares de outros…

Page 32: React Native - Workshop

REACTCOMPONENTES

Page 33: React Native - Workshop

REACTCOMPONENTES

TUDO PODE SER JAVASCRIPT

Page 34: React Native - Workshop

REACT

VIRTUAL DOM

COMPONENTES

TUDO PODE SER JAVASCRIPT

Page 35: React Native - Workshop

COMPONENTES

APP

Page 36: React Native - Workshop

COMPONENTESHEADER

TABS

CARD

CARD

Page 37: React Native - Workshop

COMPONENTESHEADER

TABS

CARD

CARD IMAGEUSER AVATAR

CARD TEXT

CARD IMAGEUSER AVATAR

CARD TEXT

Page 38: React Native - Workshop

COMPONENTESHEADER

TABS

CARD

CARD IMAGEUSER AVATAR

CARD TEXT

CARD IMAGEUSER AVATAR

CARD TEXT

HEADER

TABS

ACCOUNT INFO

USER AVATAR

ACCOUNT SETTINGS

Page 39: React Native - Workshop

CARD TEXT

CARD IMAGEUSER

AVATAR

COMPONENTES

Page 40: React Native - Workshop

CARD TEXT

CARD IMAGEUSER

AVATAR

COMPONENTES

Page 41: React Native - Workshop

import React, { Component, StyleSheet, PropTypes, Image, } from 'react-native'

export default class Avatar extends Component { constructor(props) { super(props) }

render() { return ( <Image source={this.props.image} style={styles.image} /> ) } }

Avatar.propTypes = { image: PropTypes.object.isRequired, }

const styles = StyleSheet.create({ image: { width: 30, height: 30, borderRadius: 15 }, })

Page 42: React Native - Workshop

CARD IMAGEUSER

AVATAR

CARD TEXT

COMPONENTES

Page 43: React Native - Workshop

COMPONENTEScomponentWillMount

Page 44: React Native - Workshop

COMPONENTEScomponentWillMount

componentDidMount

Page 45: React Native - Workshop

COMPONENTEScomponentWillMount

componentDidMount

componentWillReceiveProps

Page 46: React Native - Workshop

COMPONENTEScomponentWillMount

componentDidMount

componentWillReceiveProps

shouldComponentUpdate

Page 47: React Native - Workshop

COMPONENTEScomponentWillMount

componentDidMount

componentWillReceiveProps

shouldComponentUpdate

componentWillUpdate

Page 48: React Native - Workshop

COMPONENTEScomponentWillMount

componentDidMount

componentWillReceiveProps

shouldComponentUpdate

componentWillUpdate

componentDidUpdate

Page 49: React Native - Workshop

COMPONENTEScomponentWillMount

componentDidMount

componentWillReceiveProps

shouldComponentUpdate

componentWillUpdate

componentDidUpdate

componentWillUnmount

Page 50: React Native - Workshop

COMPONENTEScomponentWillMount

componentDidMount

componentWillReceiveProps

shouldComponentUpdate

componentWillUpdate

componentDidUpdate

componentWillUnmount

Props

Page 51: React Native - Workshop

COMPONENTEScomponentWillMount

componentDidMount

componentWillReceiveProps

shouldComponentUpdate

componentWillUpdate

componentDidUpdate

componentWillUnmount

Props &State

Props

Page 52: React Native - Workshop

REACT

VIRTUAL DOM

COMPONENTES

TUDO PODE SER JAVASCRIPT

Page 53: React Native - Workshop

TUDO PODE SER JAVASCRIPT

Page 54: React Native - Workshop

TUDO PODE SER JAVASCRIPT

Page 55: React Native - Workshop

HTML

Page 56: React Native - Workshop

import React, { Component, StyleSheet, PropTypes, Image, } from 'react-native'

export default class Avatar extends Component { constructor(props) { super(props) }

render() { return ( <Image source={this.props.image} style={styles.image} /> ) } }

Avatar.propTypes = { image: PropTypes.object.isRequired, }

const styles = StyleSheet.create({ image: { width: 30, height: 30, borderRadius: 15, }, })

Page 57: React Native - Workshop

import React, { Component, StyleSheet, PropTypes, Image, } from 'react-native'

export default class Avatar extends Component { constructor(props) { super(props) }

render() { return ( <Image source={this.props.image} style={styles.image} /> ) } }

Avatar.propTypes = { image: PropTypes.object.isRequired, }

const styles = StyleSheet.create({ image: { width: 30, height: 30, borderRadius: 15, }, })

Page 58: React Native - Workshop

TUDO PODE SER JAVASCRIPT

<Image source={this.props.image} style={styles.image}

/>

Page 59: React Native - Workshop

TUDO PODE SER JAVASCRIPT<Image source={this.props.image}

style={styles.image} />

JSX

Page 60: React Native - Workshop

TUDO PODE SER JAVASCRIPT<Image source={this.props.image}

style={styles.image} />

JSXlet image = React.createElement(

Image, { source: this.props.image,

style: styles.image })

Page 61: React Native - Workshop

TUDO PODE SER JAVASCRIPT

<Image source={this.props.image} style={styles.image}

/>

JSX

<img src=‘imagem.png’ style=‘border-radius: 5px’

/>

HTML

Page 62: React Native - Workshop

CSS

Page 63: React Native - Workshop

import React, { Component, StyleSheet, PropTypes, Image, } from 'react-native'

export default class Avatar extends Component { constructor(props) { super(props) }

render() { return ( <Image source={this.props.image} style={styles.image} /> ) } }

Avatar.propTypes = { image: PropTypes.object.isRequired, }

const styles = StyleSheet.create({ image: { width: 30, height: 30, borderRadius: 15, }, })

Page 64: React Native - Workshop

import React, { Component, StyleSheet, PropTypes, Image, } from 'react-native'

export default class Avatar extends Component { constructor(props) { super(props) }

render() { return ( <Image source={this.props.image} style={styles.image} /> ) } }

Avatar.propTypes = { image: PropTypes.object.isRequired, }

const styles = StyleSheet.create({ image: { width: 30, height: 30, borderRadius: 15, }, })

Page 65: React Native - Workshop

TUDO PODE SER JAVASCRIPT

StyleSheet.create({ image: { width: 30, height: 30, borderRadius: 15, }, })

Page 66: React Native - Workshop

TUDO PODE SER JAVASCRIPT

StyleSheet.create({ image: { width: 30, height: 30, borderRadius: 15, }, })

StyleSheet

Page 67: React Native - Workshop

TUDO PODE SER JAVASCRIPT

StyleSheet.create({ image: { width: 30, height: 30, borderRadius: 15, }, })

StyleSheet

.image { width: 30px,

height: 30px, borderRadius: 15px }

CSS

Page 68: React Native - Workshop

REACT

VIRTUAL DOM

COMPONENTES

TUDO PODE SER JAVASCRIPT

Page 69: React Native - Workshop

VIRTUAL DOM

HTML DOM

Page 70: React Native - Workshop

VIRTUAL DOMHTML DOM

JAVASCRIPT

Page 71: React Native - Workshop

VIRTUAL DOMHTML DOM

JAVASCRIPT

VIRTUAL DOM

Page 72: React Native - Workshop

VIRTUAL DOM

VIRTUAL DOM

ANDROID DOM

iOS DOM

HTML DOM

Page 73: React Native - Workshop

VIRTUAL DOMANDROID

DOMiOS

DOMHTML DOM

SONY DOM

SAMSUNG DOM

WINDOWS DOM

BRASTEMP DOM

LG DOM

PHILIPS DOM

Page 74: React Native - Workshop

REACT NATIVE

Page 75: React Native - Workshop

COMPONENTESView Image Text Activity

Indicator

Modal Navigator Refresh Control ScrollView

StatusBar Switch ListView TextInput

WebView MapView ProgressBar Android …

Page 76: React Native - Workshop

APIsAlert Animated AppState BackAndroid

CameraRoll Clipboard DatePicker Android Dimensions

Geolocation Linking NetInfo ToastAndroid

PixelRatio PushNotification IOS Vibration +++

Page 77: React Native - Workshop

COMUNIDADE

Page 78: React Native - Workshop

COMUNIDADE

Page 79: React Native - Workshop

COMUNIDADE

Page 80: React Native - Workshop

BIBLIOTECAS NATIVAS

Page 81: React Native - Workshop

BIBLIOTECAS NATIVASBIBLIOTECA NATIVA

REACT NATIVE

Page 82: React Native - Workshop

BIBLIOTECAS NATIVASBIBLIOTECA NATIVA

REACT NATIVE

Page 83: React Native - Workshop

BIBLIOTECAS NATIVASBIBLIOTECA NATIVA

REACT NATIVE

Page 84: React Native - Workshop

BIBLIOTECAS NATIVASBIBLIOTECA NATIVA

REACT NATIVE

REACT NATIVE BRIDGE

Page 85: React Native - Workshop

'use strict';

var {PayPal} = require('react-native').NativeModules;

var constants = {}; var constantNames = Object.keys(PayPal).filter(p => p == p.toUpperCase()); constantNames.forEach(c => constants[c] = PayPal[c]);

var functions = { paymentRequest(payPalParameters) { return new Promise(function(resolve, reject) { PayPal.paymentRequest(payPalParameters, resolve, reject); }); } };

var exported = {}; Object.assign(exported, constants, functions);

module.exports = exported;

Page 86: React Native - Workshop

'use strict';

var {PayPal} = require('react-native').NativeModules;

var constants = {}; var constantNames = Object.keys(PayPal).filter(p => p == p.toUpperCase()); constantNames.forEach(c => constants[c] = PayPal[c]);

var functions = { paymentRequest(payPalParameters) { return new Promise(function(resolve, reject) { PayPal.paymentRequest(payPalParameters, resolve, reject); }); } };

var exported = {}; Object.assign(exported, constants, functions);

module.exports = exported;

Page 87: React Native - Workshop

public class PayPal extends ReactContextBaseJavaModule { @ReactMethod public void paymentRequest( final ReadableMap payPalParameters, final Callback successCallback, final Callback errorCallback ) { final String environment = payPalParameters.getString("environment"); final String clientId = payPalParameters.getString("clientId"); final String price = payPalParameters.getString("price"); final String currency = payPalParameters.getString("currency"); final String description = payPalParameters.getString("description");

PayPalConfiguration config = new PayPalConfiguration().environment(environment).clientId(clientId);

startPayPalService(config);

PayPalPayment thingToBuy = new PayPalPayment( new BigDecimal(price), currency, description, PayPalPayment.PAYMENT_INTENT_SALE);

Intent intent = new Intent(activityContext, PaymentActivity.class) .putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config) .putExtra(PaymentActivity.EXTRA_PAYMENT, thingToBuy);

currentActivity.startActivityForResult(intent, paymentIntentRequestCode); } }

Page 88: React Native - Workshop

public class PayPal extends ReactContextBaseJavaModule { @ReactMethod public void paymentRequest( final ReadableMap payPalParameters, final Callback successCallback, final Callback errorCallback ) { final String environment = payPalParameters.getString("environment"); final String clientId = payPalParameters.getString("clientId"); final String price = payPalParameters.getString("price"); final String currency = payPalParameters.getString("currency"); final String description = payPalParameters.getString("description");

PayPalConfiguration config = new PayPalConfiguration().environment(environment).clientId(clientId);

startPayPalService(config);

PayPalPayment thingToBuy = new PayPalPayment( new BigDecimal(price), currency, description, PayPalPayment.PAYMENT_INTENT_SALE);

Intent intent = new Intent(activityContext, PaymentActivity.class) .putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config) .putExtra(PaymentActivity.EXTRA_PAYMENT, thingToBuy);

currentActivity.startActivityForResult(intent, paymentIntentRequestCode); } }

Page 89: React Native - Workshop

public class PayPal extends ReactContextBaseJavaModule { @ReactMethod public void paymentRequest( final ReadableMap payPalParameters, final Callback successCallback, final Callback errorCallback ) { final String environment = payPalParameters.getString("environment"); final String clientId = payPalParameters.getString("clientId"); final String price = payPalParameters.getString("price"); final String currency = payPalParameters.getString("currency"); final String description = payPalParameters.getString("description");

PayPalConfiguration config = new PayPalConfiguration().environment(environment).clientId(clientId);

startPayPalService(config);

PayPalPayment thingToBuy = new PayPalPayment( new BigDecimal(price), currency, description, PayPalPayment.PAYMENT_INTENT_SALE);

Intent intent = new Intent(activityContext, PaymentActivity.class) .putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config) .putExtra(PaymentActivity.EXTRA_PAYMENT, thingToBuy);

currentActivity.startActivityForResult(intent, paymentIntentRequestCode); } }

Page 90: React Native - Workshop

PLATAFORMAS

Page 91: React Native - Workshop

PLATAFORMAS

Page 92: React Native - Workshop

PLATAFORMAS

=

Page 93: React Native - Workshop

PLATAFORMAS

=

Page 94: React Native - Workshop

PLATAFORMAS

=

Page 95: React Native - Workshop

PLATAFORMASconst Loader = Platform.select({ ios: () => require('LoaderIOS'), android: () => require('LoaderAndroid'), })()

render () { ... <Loader /> ... }

Page 96: React Native - Workshop

PLATAFORMAS

import Loader from './Loader'

render () { ... <Loader /> ... }

- Loader.ios.js- Loader.android.js

Page 97: React Native - Workshop

REACT NATIVE TOOLS

Page 98: React Native - Workshop

REACT NATIVE TOOLS

Page 99: React Native - Workshop

REACT NATIVE TOOLS

Não precisa compilar

Desenvolvimento dinâmico

Monitor de performance

Page 100: React Native - Workshop

REACT NATIVE TOOLS

$ react-native logs-ios$ react-native logs-android

Page 101: React Native - Workshop

REACT NATIVE TOOLS

$ react-native logs-ios$ react-native logs-android

Debug on Chrome

Page 102: React Native - Workshop

CODE PUSH

Page 103: React Native - Workshop

CODE PUSH

Page 104: React Native - Workshop

CODE PUSH

Page 105: React Native - Workshop

CODE PUSH

npm i —save react-native-code-push@latest

Page 106: React Native - Workshop

CODE PUSHnpm i —save react-native-code-push@latest

import codePush from ‘react-native-code-push'

...

componentDidMount() { codePush.sync()

}

Page 107: React Native - Workshop

CODE PUSHnpm i —save react-native-code-push@latest

import codePush from ‘react-native-code-push'

...

componentDidMount() { codePush.sync()

}

code-push release-react SampleApp ios

Page 108: React Native - Workshop

CODE PUSH

code-push release-react SampleApp

-- rollout 25%

-- targetBinaryVersion “~1.1.0”

Page 109: React Native - Workshop

CODE PUSH

code-push rollback

Page 110: React Native - Workshop

RNPM

Page 111: React Native - Workshop

RNPM

Page 112: React Native - Workshop

RNPM

Page 113: React Native - Workshop

RNPM

Page 114: React Native - Workshop

RNPM

Page 115: React Native - Workshop

RNPM

Page 116: React Native - Workshop

RNPM

npm i rnpm -g

Page 117: React Native - Workshop

RNPMnpm i rnpm -g

npm i react-native-module --savernpm link react-native-module

Page 118: React Native - Workshop

RNPMnpm i rnpm -g

rnpm install react-native-module

Page 119: React Native - Workshop

BOAS PRÁTICAS

Page 120: React Native - Workshop

BOAS PRÁTICAS

ESTRUTURA DO SEU PROJETO

FLUXO DE DADOS

TESTANDO SEUS COMPONENTES

Page 121: React Native - Workshop

FLUXO DE DADOS

COMPONENT

Page 122: React Native - Workshop

FLUXO DE DADOSCOMPONENT

API

Page 123: React Native - Workshop

FLUXO DE DADOSCOMPONENT

API

class SampleComponent extends Component { ... componentDidMount() {

fetch(‘http://api.com/data‘).then((res) => { this.setState({ data: res })

}) } ...

}

Page 124: React Native - Workshop

FLUXO DE DADOSCOMPONENT

API

COMPONENT

API

COMPONENT

API

COMPONENT

API

COMPONENT

API

Page 125: React Native - Workshop

FLUXO DE DADOSCOMPONENT

API

COMPONENT

API

COMPONENT

API

COMPONENT

API

COMPONENT

API

Page 126: React Native - Workshop

FLUXO DE DADOS

Page 127: React Native - Workshop

FLUXO DE DADOS

Page 128: React Native - Workshop

REDUX

COMPONENT

API

ACTION CREATORS

Page 129: React Native - Workshop

REDUX

COMPONENTAPI

ACTION CREATORS REDUCERS

Page 130: React Native - Workshop

REDUX

COMPONENTAPI

ACTION CREATORS

STORE

REDUCERS

Page 131: React Native - Workshop

REDUX

COMPONENTAPI

ACTION CREATORS

STORE

REDUCERS

Page 132: React Native - Workshop

REDUX

COMPONENTAPI

ACTION CREATORS

componentDidMounted

STORE

REDUCERS

Page 133: React Native - Workshop

REDUX

COMPONENTAPI

ACTION CREATORS

componentDidMounted

fetchData STORE

REDUCERS

Page 134: React Native - Workshop

REDUX

COMPONENTAPI

ACTION CREATORS

componentDidMounted

fetchDataHTTP STORE

REDUCERS

Page 135: React Native - Workshop

REDUX

COMPONENTAPI

ACTION CREATORS

componentDidMounted

fetchDataHTTP JSON STORE

REDUCERS

Page 136: React Native - Workshop

REDUX

COMPONENTAPI

ACTION CREATORS

STORE

REDUCERS

componentDidMounted

fetchDataHTTP JSON

Data

Page 137: React Native - Workshop

REDUX

COMPONENTAPI

ACTION CREATORS

STORE

REDUCERS

componentDidMounted

fetchDataHTTP JSON

Data

New State

Page 138: React Native - Workshop

REDUX

COMPONENTAPI

ACTION CREATORS

STORE

REDUCERS

componentDidMounted

fetchDataHTTP JSON

Data

New State

State

Page 139: React Native - Workshop

BOAS PRÁTICAS

ESTRUTURA DO SEU PROJETO

FLUXO DE DADOS

TESTANDO SEUS COMPONENTES

Page 140: React Native - Workshop

TESTANDO SEUS COMPONENTES

Page 141: React Native - Workshop

TESTANDO SEUS COMPONENTES

Page 142: React Native - Workshop

TESTANDO SEUS COMPONENTES

Page 143: React Native - Workshop

TESTANDO SEUS COMPONENTES

COMPONENTACTION CREATORS STOREREDUCERS

Page 144: React Native - Workshop

TESTANDO SEUS COMPONENTES

COMPONENTACTION CREATORS STOREREDUCERS

Page 145: React Native - Workshop

TESTANDO SEUS COMPONENTES

COMPONENTACTION CREATORS STOREREDUCERS

Page 146: React Native - Workshop

TESTANDO SEUS COMPONENTES

COMPONENTACTION CREATORS REDUCERS

Page 147: React Native - Workshop

TESTANDO SEUS COMPONENTES

ACTION CREATORS

describe('actions', () => { it('should create an action to load items', () => {

// given const loading = true const expectedAction = {

type: 'START_LOADER', loading: loading

} // when let action = actions.loadItems() // then expect(action).toEqual(expectedAction)

} })

Page 148: React Native - Workshop

TESTANDO SEUS COMPONENTES

COMPONENTACTION CREATORS REDUCERS

Page 149: React Native - Workshop

REDUCERS

TESTANDO SEUS COMPONENTESdescribe('items reducer', () => {

it('should handle START_LOADER', () => { // given const initialState = { loading: false, items: [] } const expectedState = {

loading: true, items: []

} const action = {

type: 'START_LOADER', loading: true

} // when let state = reducer(initialState, action) // then expect(state).toEqual(expectedState)

} })

Page 150: React Native - Workshop

TESTANDO SEUS COMPONENTES

COMPONENTACTION CREATORS REDUCERS

Page 151: React Native - Workshop

COMPONENT

TESTANDO SEUS COMPONENTESclass ItemList extends Component {

constructor(props) { super(props)

}

_handleLoader() { if (this.props.loading) {

return <Loader /> }

}

render() { let loader = this._handleLoader() return (

<View> {loader}

</View> )

} }

Page 152: React Native - Workshop

COMPONENT

TESTANDO SEUS COMPONENTES

describe(‘ItemList Component', () => { it('should render a view without loader', () => {

// given const props = { loading: false, } // when let renderer = TestUtils.createRenderer() renderer.render(<ItemList {...props} />) let output = renderer.getRenderOutput() // then expect(output.type).toBe(View) expect(output.props.children).toEqual(undefined)

} })

Page 153: React Native - Workshop

TESTANDO SEUS COMPONENTES

COMPONENTACTION CREATORS REDUCERS

Page 154: React Native - Workshop

TESTANDO SEUS COMPONENTES

COMPONENTACTION CREATORS REDUCERS

SERVER

Page 155: React Native - Workshop

TESTANDO SEUS COMPONENTES

COMPONENTACTION CREATORS REDUCERS

SERVER

Page 156: React Native - Workshop

BOAS PRÁTICAS

ESTRUTURA DO SEU PROJETO

FLUXO DE DADOS

TESTANDO SEUS COMPONENTES

Page 157: React Native - Workshop

ESTRUTURA DO SEU PROJETO

your-project/ android/ ios/ - index.android.js- index.ios.js

Page 158: React Native - Workshop

ESTRUTURA DO SEU PROJETOyour-project/

android/ ios/ src/ - index.android.js- index.ios.js

Page 159: React Native - Workshop

ESTRUTURA DO SEU PROJETOyour-project/

android/ ios/ src/

actions/ components/ containers/ reducers/ store/

- index.android.js- index.ios.js

Page 160: React Native - Workshop

ESTRUTURA DO SEU PROJETO

src/ actions/

- Posts.js - Posts.spec.js

components/ containers/ reducers/ store/

Page 161: React Native - Workshop

ESTRUTURA DO SEU PROJETOsrc/

actions/ components/

- Loader.js - Loader.spec.js - Post.js - Post.spec.js

containers/ reducers/ store/

Page 162: React Native - Workshop

ESTRUTURA DO SEU PROJETOsrc/

actions/ components/

base/ - Loader.js - Loader.spec.js

post/ - Post.js - Post.spec.js - PostActions.js - PostActions.spec.js account/ - AccountSettings.js - AccountSettings.spec.js

containers/ reducers/ store/

Page 163: React Native - Workshop

ESTRUTURA DO SEU PROJETOsrc/

actions/ components/ containers/ - Root.js - Root.spec.js - Timeline.js - Timeline.spec.js - Account.js - Account.spec.js reducers/ store/

Page 164: React Native - Workshop

ESTRUTURA DO SEU PROJETOsrc/

actions/ components/ containers/ reducers/ - Root.js - Root.spec.js - Posts.js - Posts.spec.js - Account.js - Account.spec.js store/

Page 165: React Native - Workshop

ESTRUTURA DO SEU PROJETO

src/ actions/ components/ containers/ reducers/ store/ - ConfigureStore.js

Page 166: React Native - Workshop

SAMPLE APP

Page 167: React Native - Workshop

SAMPLE APP

https://github.com/Vizir/ReactNativeWorkshop