SlideShare une entreprise Scribd logo
1  sur  93
Télécharger pour lire hors ligne
Redux	Deep	Dive
Destructuring an	Object
1. const newState = {
2. ...state,
3. key1: value1,
4. key2: value2
5. }
1. const newState = _.extend(
2. {},
3. state,
4. {
5. key1, value1,
6. key2, value2
7. }
8. )
Agenda
1. Redux	Basics	(Brief)
2. Enhancers,	Middlewares
3. Problems
1. Typos,	Types,	Tree	Shaking,	Chunking
2. Partial	but	failing	Solutions
4. Solution
React’s Philosophy
Props	/	
State
VDOM DOM
render
Pure	Function
React
React	Philosophy
Events
Props	/	
State
VDOM DOM
render
Pure	Function
ReactsetState
As	your	App	grows,	it	
becomes	difficult	to	
manage	using	setState
Enter	Redux
Redux Store
State
Component
Action
Reducers
Provide	store	at	root	level
1. import { createStore } from 'redux'
2. import { Provider } from 'react-redux';
3.
4. import reducer from './reducers';
5.
6. const store = createStore(reducer);
7.
8. export default () => {
9. return (
10. <Provider store={store}>
11. <App>
12. </Provider>
13. )
14. };
Store’s	State	passed	to	Components
1. import { connect } from 'react-redux'
2.
3. class HeaderComponent extends React.Component {
4. render () {
5. return (
6. <h1> {this.props.user} </h1>
7. )
8. }
9. }
10.
11. const mapStateToProps = (state) => ({
12. user: state.user
13. });
14.
15. export default connect(mapStateToProps)(HeaderComponent);
Dispatch	an	Action
1. class Counter extends React.Component {
2. onClick = (e) => {
3. this.props.dispatch({
4. type: 'COUNTER_CLICKED',
5. payload: e.currentTarget.data.id
6. })
7. }
8. render () {
9. return <div
10. onClick={this.onClick(e)}
11. data-id={this.props.id}
12. />
13. }
14. }
Reducer
1. export default function reducer(state, action) {
2. switch (action.type) {
3. case 'COUNTER_CLICKED':
4. return {
5. ...state,
6. counterClicked: true
7. }
8. ...
9. default:
10. return state;
11. }
12.}
Redux Store
State
Component
Action
Reducers
Time	to	Level	Up
Enhancers
createStore => newCreateStore
Enhancers	wrap	around	createStore
enhancer
createStore
1. function enhancer (createStore) {
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.}
Sample	Enhancer	which	logs	on	every	getState()
1. function enhancer (createStore) {
2. return (...args) => {
3.
4.
5.
6.
7.
8.
9.
10.
11. }
12.}
Sample	Enhancer	which	logs	on	every	getState()
1. function enhancer (createStore) {
2. return (...args) => {
3. const store = createStore(...args)
4. return {
5. ...store,
6.
7.
8.
9.
10. }
11. }
12.}
Sample	Enhancer	which	logs	on	every	getState()
1. function enhancer (createStore) {
2. return (...args) => {
3. const store = createStore(...args)
4. return {
5. ...store,
6. getState: () => {
7. console.log('getState was called')
8. return store.getState()
9. }
10. }
11. }
12.}
Sample	Enhancer	which	logs	on	every	getState()
How	to	use	Enhancers
1. const store = enchancer(createStore)(reducer)
OR
1. const store = createStore(reducer, enhancer)
Multiple	Enhancers
1. const store = enhancer1(enhancer2(createStore))(reducer)
OR
1. const store = compose(enhacer1, enhancer2)(createStore)(reducer)
OR
1. const store = createStore(reducer, compose(enchancer1, enhancer2))
(( )))compose( first , second , third )( ...args( )
Art	by	C
Debugging	– Redux Dev	Tools
applyMiddleware
1. export default function applyMiddleware(...middlewares) {
2. return (createStore) => (...args) => {
3. const store = createStore(...args)
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14. }
15. }
applyMiddleware is	an	Enhancer
1. export default function applyMiddleware(...middlewares) {
2. return (createStore) => (...args) => {
3. const store = createStore(...args)
4. let dispatch = () => {}
5. const newStore = {
6. ...store,
7. dispatch: (...action) => dispatch(...action)
8. }
9.
10.
11.
12.
13. return newStore
14. }
15. }
applyMiddleware is	an	Enhancer
1. export default function applyMiddleware(...middlewares) {
2. return (createStore) => (...args) => {
3. const store = createStore(...args)
4. let dispatch = () => {}
5. const newStore = {
6. ...store,
7. dispatch: (...action) => dispatch(...action)
8. }
9.
10. const chain = middlewares.map(middleware => middleware(newStore)) // init with store
11. dispatch = compose(...chain)(store.dispatch) // load with next dispatch
12.
13. return newStore
14. }
15. }
Redux Middlewares
store => nextMiddleware => action => nextMiddleware(action)
Redux	Thunk
1. const thunk = store => next => action => {
2. if (typeof action === 'function') {
3. return action(store.dispatch, store.getState)
4. }
5.
6. return next(action)
7. }
Redux	Thunk Usage
1. function doSomethingAction (dispatch) {
2. dispatch((dispatch, getState) => {
3.
4.
5.
6.
7.
8. })
9. }
Redux	Thunk Usage
1. function doSomethingAction (dispatch) {
2. dispatch((dispatch, getState) => {
3. const state = getState()
4. dispatch({
5. type: 'DO_SOMETHING',
6. payload: state.user
7. })
8. })
9. }
Non	DOM	Side	Effects
1. const setTitle = store => next => action => {
2. const getState = store.getState
3.
4. const oldTitle = getState().title
5. next(action)
6. const newTitle = getState().title
7.
8. if (oldTitle !== newTitle) {
9. document.title = newTitle
10. }
11. return action
12.}
Tracking	Breadcrumbs	/	User	Flow
1. import Raven from '../helpers/sentry’
2.
3. const trackBreadCrumb = () => next => action => {
4. Raven.captureBreadcrumb({
5. category: 'redux'
6. message: action.type
7. })
8. return next(action)
9. }
Sentry	Error	Logs	Breadcrumbs
How	to	use	these	middlewares
1. import { createStore, applyMiddleware } from 'redux'
2.
const store = createStore(
3. reducer,
4. compose(
5. applyMiddleware(
6. thunk,
7. setTitle,
8. trackBreadcrumb
9. ),
10. window.__REDUX_DEVTOOLS_EXTENSION__()
11. )
12. )
Redux-sagas
For	more	info	attend	Preeti’s talk	after	lunch.
My	Problems
My	Problems
^
1.	Typos
Typos
1. dispatch({
2. type: 'DO_SOEMTHING_AMAMAZING'
3. })
export const AMAZING_ACTION = 'AMAZING_ACTION’ // actionsList.js
1. import {AMAZING_ACTION} from
'./actionsList’
2.
3. dispatch({
4. type: AMAZING_ACTION
5. })
1. import {AMAZING_ACTION} from
'../actionsList’
2.
3. export function reducer (state, action) {
4. switch (action.type) {
5. case AMAZING_ACTION:
6. ...
7. }
8. }
// actionsList.js
1. export const AMAZING_ACTION = 'AMAZING_ACTION'
2. export const AWESOME_ACTION = 'AWESOME_ACTION'
3. export const FANTASTIC_ACTION = 'FANTASTIC_ACTION'
4. export const MINDBLOWING_ACTION = 'MINDBLOWING_ACTION'
5. export const ACTION_ACTION = 'ACTION_ACTION'
6. export const DRAMA_ACTION = 'DRAMA_ACTION'
7. export const AMAZING_ACTION_2 = 'AMAZING_ACTION_2'
8. export const AWESOME_ACTION_2 = 'AWESOME_ACTION_2'
9. export const FANTASTIC_ACTION_2 = 'FANTASTIC_ACTION_2'
10. export const MINDBLOWING_ACTION_2 = 'MINDBLOWING_ACTION_2'
11. export const ACTION_ACTION_2 = 'ACTION_ACTION_2'
12. export const DRAMA_ACTION_2 = 'DRAMA_ACTION_2'
13. export const AMAZING_ACTION_3 = 'AMAZING_ACTION_3'
14. export const AWESOME_ACTION_3 = 'AWESOME_ACTION_3'
15. export const FANTASTIC_ACTION_3 = 'FANTASTIC_ACTION_3'
16. export const MINDBLOWING_ACTION_3 = 'MINDBLOWING_ACTION_3'
17. export const ACTION_ACTION_3 = 'ACTION_ACTION_3'
18. export const DRAMA_ACTION_3 = 'DRAMA_ACTION_3’
Need	to	add	in	3	places	instead	of	2	😩
1.Actions
2.Reducers
3.ActionsList
2.	Types
Types	- Action
1. dispatch({
2. type: 'ACTION_DRAMA',
3. payload: 8
4. })
Types	- Action
1. dispatch({
2. type: 'ACTION_DRAMA',
3. payload: {
4. id: 8,
5. rating: 9.5
6. }
7. })
Types	- Reducer
1. function reducer (state, action) {
2. switch (action.type) {
3. case 'ACTION_DRAMA':
4. const id = action.payload
5.
6. ...
7.
8. }
9. }
Types	- Reducer
1. function reducer (state, action) {
2. switch (action.type) {
3. case 'ACTION_DRAMA':
4. const {id, rating} = action.payload
5.
6. ...
7.
8. }
9. }
In	another	location,	you	forgot
1. dispatch({
2. type: 'ACTION_DRAMA',
3. payload: 8
4. })
How	are	you	going	to	grep /	search	this?
1. const ACTION = 'ACTION_'
2. dispatch({
3. type: ACTION + 'DRAMA',
4. payload: 8
5. })
Image	by	Dave	Dugdale of	www.learningDSLRVideo.com
Action	Types
1. export type DramaAction = {
2. type: 'DRAMA_ACTION',
3. payload: {
4. id: number,
5. rating: number
6. },
7. };
8.
9. export type ActionAction = {
10. type: 'ACTION_ACTION',
11. payload: number,
12. };
13.
14. export type Action = DramaAction | ActionAction;
Store	Types
1. import type {
2. Store as ReduxStore,
3. Dispatch as ReduxDispatch,
4. } from 'redux';
5. import type { Action } from './Action';
6. import type { State } from './State';
7.
8. export type Store = ReduxStore<State, Action>;
9.
10. export type GetState = () => State;
11.
12. export type Dispatch = ReduxDispatch<Action>
13.
Action
1. import type {Dispatch} from './types/Store'
2.
export function dramaAction(dispatch: Dispatch, id: number, rating: number) {
3. return dispatch({
4. type: 'DRAMA_ACTION',
5. payload: { id, rating }
6. });
7. }
8.
export function actionAction(dispatch: Dispatch, id: number) {
9. return dispatch({
10. type: 'ACTION_ACTION',
11. payload: id
12. })
13. }
Need	to	maintain	3	places	instead	of	2	😩
1.Actions
2.Reducers
3.ActionTypes
Too	much	work,	must	find	hack.
1. export type FallbackAction = {
2. type: string,
3. [string]: any
4. }
5.
6. export type Action = DramaAction | ActionAction | FallbackAction;
3.	Tree	Shaking
Removing	unused	code	during	build	or	minification
Long	list	of	Switch	Case	in	Reducer
1. export default function reducer(state, action) {
2. switch (action.type) {
3. case 'DRAMA_ACTION':
4. return {
5. ...state,
6. movie: {id: action.id, rating: action.rating}
7. }
8. case 'ACTION_ACTION':
9. return {
10. ...state,
11. movie: {id: action.id}
12. }
13. default:
14. return state;
15. }
16. }
Tree	Shaking	Dead	Code
becomes	difficult
4.	Route	Specific	Code	Splitting	
Reducers
Pinterest’s	Chunks
Possibly	even	Reducers
Pinterest’s	Chunks
Route	Specific	Reducers
store.replaceReducer
1. import globalReducer from './reducers/globalReducer'
2.
function onRouteChange (newReducer) {
3. store.replaceReducer(
4. mergeReducer(
5. globalReducer,
6. newReducer
7. )
8. )
9. }
How	to	go	ahead	with	Route	Specific	Reducers
1. Each	Chunk	defines	its	reducer
2. Before	component	is	rendered,	call	
store.replaceReducer
Problems	with	this	approach
1. Difficult	to	migrate.
2. Difficult	to	ensure	that	the	correct	reducer	will	be	
available	when	you	dispatch	an	action.
Photo	by	Riccardo	Annandale on	Unsplash
Dispatch	your	reducer
Dispatch	your	reducer	instead	of	type
1. import {ACTION_DRAMA} from './dramaReducers'
2.
export function dramaAction (dispatch, id, rating) {
3. dispatch({
4. reducer: ACTION_DRAMA,
5. payload: {
6. id,
7. rating
8. }
9. })
10.}
Reducer
1. export function ACTION_DRAMA (state, payload) {
2. return {
3. ...state,
4. movie: {
5. id: payload.id,
6. rating: payload.rating
7. }
8. }
9. }
But	does	it	fix	my	problems?
1.	Typos
1. import { ACTION_DRAMA } from './dramaReducers'
2.
export function dramaAction (dispatch, id, rating) {
3. dispatch({
4. reducer: ACTION_DRAMA,
5. payload: {
6. id,
7. rating
8. }
9. })
10.}
2.	Types
1. import type { State } from './State';
2.
3. export type Reducer<P> = (
4. state: State,
5. payload: P
6. ) => State;
7.
8. export type Action<P> = {
9. reducer: Reducer<P>,
10. payload: P
11. }
12.
13. export type Dispatch = <T>(action: Action<T>) => void
2.	Types	- Reducer
1. export function INCREMENT_COUNTER (state: State, payload: number): State {
2. return {
3. ...state,
4. counter: state.counter + payload
5. }
6. }
2.	Types	- Action
1. export function increment(dispatch: Dispatch,
amount: number) {
2. return dispatch({
3. reducer: INCREMENT_COUNTER,
4. payload: 1,
5. });
6. }
7.
2.	Types	- IDE	(Nuclide)	throws	errors
3.	Tree	Shaking	Unused	Reducer	Code
1. import { ACTION_DRAMA } from './dramaReducers'
2.
export function dramaAction (dispatch, id, rating) {
3. dispatch({
4. reducer: ACTION_DRAMA,
5. payload: {
6. id,
7. rating
8. }
9. })
10.}
3.	Tree	Shaking	Unused	Reducer	Code
1. https://github.com/kentcdodds/webpack-tree-shaking-exports
4.	Code	Splitting	across	Routes	- Before
Entry
Store
Reducers Middlewares
Component
Actions
4.	Code	Splitting	across	Routes	- After
Entry
Store
Middlewares
Component
Actions
Reducers
How	to	get	this	to	work?
1. const dispatchReducerMiddleware = () => next => action => {
2. if (
3. typeof action === 'object' &&
4. typeof action.reducer === 'function'
5. ) {
6. action = {
7. ...action,
8. type: action.reducer.name
9. }
10. }
11. return next(action)
12.}
What	about	the	reducer	passed	to	createStore?
1. function reducer (state, action) {
2. if (action.reducer) {
3. return action.reducer(state, action.payload)
4. }
5. return state
6. }
How	to	use	with	Redux	Devtools
1. const store = createStore(
2. reducer,
3. compose(
4. applyMiddleware(
5. ...middlewares,
6. dispatchReducerMiddleware
7. ),
8. window.__REDUX_DEVTOOLS_EXTENSION__()
9. )
10.)
combineReducers
Left	as	an	exercise	to	the	Reader	of
https://github.com/azizhk/react-boilerplate/pull/1
Codemod
https://gist.github.com/azizhk/b4f9f5e45055a25bd28eef56540714e4
Takeaway
1. Write	your	enhancer	for	your	problems.
2. Write	codemods for	migrations
Aziz	Khambati
/azizhk110
/@azizhk

Contenu connexe

Tendances

Optimization in django orm
Optimization in django ormOptimization in django orm
Optimization in django ormDenys Levchenko
 
Symfony2 - from the trenches
Symfony2 - from the trenchesSymfony2 - from the trenches
Symfony2 - from the trenchesLukas Smith
 
JavaScript Proven Practises
JavaScript Proven PractisesJavaScript Proven Practises
JavaScript Proven PractisesRobert MacLean
 
Rails Concurrency Gotchas
Rails Concurrency GotchasRails Concurrency Gotchas
Rails Concurrency Gotchasmarcostoledo
 
Knock, knock, who is there? Doze.
Knock, knock, who is there? Doze.Knock, knock, who is there? Doze.
Knock, knock, who is there? Doze.Yonatan Levin
 
Hibernate
HibernateHibernate
Hibernateksain
 
Behavioral pattern 4
Behavioral pattern 4Behavioral pattern 4
Behavioral pattern 4Naga Muruga
 
White Paper On ConCurrency For PCMS Application Architecture
White Paper On ConCurrency For PCMS Application ArchitectureWhite Paper On ConCurrency For PCMS Application Architecture
White Paper On ConCurrency For PCMS Application ArchitectureShahzad
 
Secret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you aboutSecret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you aboutDror Helper
 
OR Mapping- nhibernate Presentation
OR Mapping- nhibernate PresentationOR Mapping- nhibernate Presentation
OR Mapping- nhibernate PresentationShahzad
 
Converting Db Schema Into Uml Classes
Converting Db Schema Into Uml ClassesConverting Db Schema Into Uml Classes
Converting Db Schema Into Uml ClassesKaniska Mandal
 
To Study The Tips Tricks Guidelines Related To Performance Tuning For N Hib...
To Study The Tips Tricks  Guidelines Related To Performance Tuning For  N Hib...To Study The Tips Tricks  Guidelines Related To Performance Tuning For  N Hib...
To Study The Tips Tricks Guidelines Related To Performance Tuning For N Hib...Shahzad
 
The art of reverse engineering flash exploits
The art of reverse engineering flash exploitsThe art of reverse engineering flash exploits
The art of reverse engineering flash exploitsPriyanka Aash
 
What's new in Doctrine
What's new in DoctrineWhat's new in Doctrine
What's new in DoctrineJonathan Wage
 
Swift for TensorFlow - CoreML Personalization
Swift for TensorFlow - CoreML PersonalizationSwift for TensorFlow - CoreML Personalization
Swift for TensorFlow - CoreML PersonalizationJacopo Mangiavacchi
 
Advance Java Programs skeleton
Advance Java Programs skeletonAdvance Java Programs skeleton
Advance Java Programs skeletonIram Ramrajkar
 
Volley lab btc_bbit
Volley lab btc_bbitVolley lab btc_bbit
Volley lab btc_bbitCarWash1
 

Tendances (19)

Optimization in django orm
Optimization in django ormOptimization in django orm
Optimization in django orm
 
Symfony2 - from the trenches
Symfony2 - from the trenchesSymfony2 - from the trenches
Symfony2 - from the trenches
 
JavaScript Proven Practises
JavaScript Proven PractisesJavaScript Proven Practises
JavaScript Proven Practises
 
Rails Concurrency Gotchas
Rails Concurrency GotchasRails Concurrency Gotchas
Rails Concurrency Gotchas
 
Knock, knock, who is there? Doze.
Knock, knock, who is there? Doze.Knock, knock, who is there? Doze.
Knock, knock, who is there? Doze.
 
Hibernate
HibernateHibernate
Hibernate
 
Unit 4
Unit 4Unit 4
Unit 4
 
Behavioral pattern 4
Behavioral pattern 4Behavioral pattern 4
Behavioral pattern 4
 
White Paper On ConCurrency For PCMS Application Architecture
White Paper On ConCurrency For PCMS Application ArchitectureWhite Paper On ConCurrency For PCMS Application Architecture
White Paper On ConCurrency For PCMS Application Architecture
 
Secret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you aboutSecret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you about
 
Java
JavaJava
Java
 
OR Mapping- nhibernate Presentation
OR Mapping- nhibernate PresentationOR Mapping- nhibernate Presentation
OR Mapping- nhibernate Presentation
 
Converting Db Schema Into Uml Classes
Converting Db Schema Into Uml ClassesConverting Db Schema Into Uml Classes
Converting Db Schema Into Uml Classes
 
To Study The Tips Tricks Guidelines Related To Performance Tuning For N Hib...
To Study The Tips Tricks  Guidelines Related To Performance Tuning For  N Hib...To Study The Tips Tricks  Guidelines Related To Performance Tuning For  N Hib...
To Study The Tips Tricks Guidelines Related To Performance Tuning For N Hib...
 
The art of reverse engineering flash exploits
The art of reverse engineering flash exploitsThe art of reverse engineering flash exploits
The art of reverse engineering flash exploits
 
What's new in Doctrine
What's new in DoctrineWhat's new in Doctrine
What's new in Doctrine
 
Swift for TensorFlow - CoreML Personalization
Swift for TensorFlow - CoreML PersonalizationSwift for TensorFlow - CoreML Personalization
Swift for TensorFlow - CoreML Personalization
 
Advance Java Programs skeleton
Advance Java Programs skeletonAdvance Java Programs skeleton
Advance Java Programs skeleton
 
Volley lab btc_bbit
Volley lab btc_bbitVolley lab btc_bbit
Volley lab btc_bbit
 

Similaire à Redux Deep Dive - ReactFoo Pune 2018

MeetJS Summit 2016: React.js enlightenment
MeetJS Summit 2016: React.js enlightenmentMeetJS Summit 2016: React.js enlightenment
MeetJS Summit 2016: React.js enlightenmentArtur Szott
 
Ten useful JavaScript tips & best practices
Ten useful JavaScript tips & best practicesTen useful JavaScript tips & best practices
Ten useful JavaScript tips & best practicesAnkit Rastogi
 
React + Redux. Best practices
React + Redux.  Best practicesReact + Redux.  Best practices
React + Redux. Best practicesClickky
 
2018 02-22 React, Redux & Building Applications that Scale | Redux
2018 02-22 React, Redux & Building Applications that Scale | Redux2018 02-22 React, Redux & Building Applications that Scale | Redux
2018 02-22 React, Redux & Building Applications that Scale | ReduxCodifly
 
Workshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testingWorkshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testingVisual Engineering
 
CQRS and Event Sourcing in a Symfony application
CQRS and Event Sourcing in a Symfony applicationCQRS and Event Sourcing in a Symfony application
CQRS and Event Sourcing in a Symfony applicationSamuel ROZE
 
JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"GeeksLab Odessa
 
Android programming -_pushing_the_limits
Android programming -_pushing_the_limitsAndroid programming -_pushing_the_limits
Android programming -_pushing_the_limitsDroidcon Berlin
 
Using Redux-Saga for Handling Side Effects
Using Redux-Saga for Handling Side EffectsUsing Redux-Saga for Handling Side Effects
Using Redux-Saga for Handling Side EffectsGlobalLogic Ukraine
 
Cristiano Betta (Betta Works) - Lightweight Libraries with Rollup, Riot and R...
Cristiano Betta (Betta Works) - Lightweight Libraries with Rollup, Riot and R...Cristiano Betta (Betta Works) - Lightweight Libraries with Rollup, Riot and R...
Cristiano Betta (Betta Works) - Lightweight Libraries with Rollup, Riot and R...Techsylvania
 
Workshop 20: ReactJS Part II Flux Pattern & Redux
Workshop 20: ReactJS Part II Flux Pattern & ReduxWorkshop 20: ReactJS Part II Flux Pattern & Redux
Workshop 20: ReactJS Part II Flux Pattern & ReduxVisual Engineering
 
Building cross-platform mobile apps with React Native (Jfokus 2017)
Building cross-platform mobile apps with React Native (Jfokus 2017)Building cross-platform mobile apps with React Native (Jfokus 2017)
Building cross-platform mobile apps with React Native (Jfokus 2017)Maarten Mulders
 
Damian Kmiecik - Road trip with Redux
Damian Kmiecik - Road trip with ReduxDamian Kmiecik - Road trip with Redux
Damian Kmiecik - Road trip with ReduxPROIDEA
 
Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.Astrails
 
How to use redux with react hooks in react native application
How to use redux with react hooks in react native applicationHow to use redux with react hooks in react native application
How to use redux with react hooks in react native applicationKaty Slemon
 
Workshop 22: ReactJS Redux Advanced
Workshop 22: ReactJS Redux AdvancedWorkshop 22: ReactJS Redux Advanced
Workshop 22: ReactJS Redux AdvancedVisual Engineering
 

Similaire à Redux Deep Dive - ReactFoo Pune 2018 (20)

React lecture
React lectureReact lecture
React lecture
 
Ngrx slides
Ngrx slidesNgrx slides
Ngrx slides
 
MeetJS Summit 2016: React.js enlightenment
MeetJS Summit 2016: React.js enlightenmentMeetJS Summit 2016: React.js enlightenment
MeetJS Summit 2016: React.js enlightenment
 
Ten useful JavaScript tips & best practices
Ten useful JavaScript tips & best practicesTen useful JavaScript tips & best practices
Ten useful JavaScript tips & best practices
 
React + Redux. Best practices
React + Redux.  Best practicesReact + Redux.  Best practices
React + Redux. Best practices
 
2018 02-22 React, Redux & Building Applications that Scale | Redux
2018 02-22 React, Redux & Building Applications that Scale | Redux2018 02-22 React, Redux & Building Applications that Scale | Redux
2018 02-22 React, Redux & Building Applications that Scale | Redux
 
Workshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testingWorkshop 23: ReactJS, React & Redux testing
Workshop 23: ReactJS, React & Redux testing
 
CQRS and Event Sourcing in a Symfony application
CQRS and Event Sourcing in a Symfony applicationCQRS and Event Sourcing in a Symfony application
CQRS and Event Sourcing in a Symfony application
 
Side effects-con-redux
Side effects-con-reduxSide effects-con-redux
Side effects-con-redux
 
JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"
 
Android programming -_pushing_the_limits
Android programming -_pushing_the_limitsAndroid programming -_pushing_the_limits
Android programming -_pushing_the_limits
 
Using Redux-Saga for Handling Side Effects
Using Redux-Saga for Handling Side EffectsUsing Redux-Saga for Handling Side Effects
Using Redux-Saga for Handling Side Effects
 
Cristiano Betta (Betta Works) - Lightweight Libraries with Rollup, Riot and R...
Cristiano Betta (Betta Works) - Lightweight Libraries with Rollup, Riot and R...Cristiano Betta (Betta Works) - Lightweight Libraries with Rollup, Riot and R...
Cristiano Betta (Betta Works) - Lightweight Libraries with Rollup, Riot and R...
 
Workshop 20: ReactJS Part II Flux Pattern & Redux
Workshop 20: ReactJS Part II Flux Pattern & ReduxWorkshop 20: ReactJS Part II Flux Pattern & Redux
Workshop 20: ReactJS Part II Flux Pattern & Redux
 
Building cross-platform mobile apps with React Native (Jfokus 2017)
Building cross-platform mobile apps with React Native (Jfokus 2017)Building cross-platform mobile apps with React Native (Jfokus 2017)
Building cross-platform mobile apps with React Native (Jfokus 2017)
 
Damian Kmiecik - Road trip with Redux
Damian Kmiecik - Road trip with ReduxDamian Kmiecik - Road trip with Redux
Damian Kmiecik - Road trip with Redux
 
JavaFX Pitfalls
JavaFX PitfallsJavaFX Pitfalls
JavaFX Pitfalls
 
Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.
 
How to use redux with react hooks in react native application
How to use redux with react hooks in react native applicationHow to use redux with react hooks in react native application
How to use redux with react hooks in react native application
 
Workshop 22: ReactJS Redux Advanced
Workshop 22: ReactJS Redux AdvancedWorkshop 22: ReactJS Redux Advanced
Workshop 22: ReactJS Redux Advanced
 

Dernier

Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...roncy bisnoi
 
AKTU Computer Networks notes --- Unit 3.pdf
AKTU Computer Networks notes ---  Unit 3.pdfAKTU Computer Networks notes ---  Unit 3.pdf
AKTU Computer Networks notes --- Unit 3.pdfankushspencer015
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...ranjana rawat
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdfKamal Acharya
 
Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)simmis5
 
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Bookingroncy bisnoi
 
Generative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTGenerative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTbhaskargani46
 
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfKamal Acharya
 
Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...Christo Ananth
 
Thermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptThermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptDineshKumar4165
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordAsst.prof M.Gokilavani
 
Unleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapUnleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapRishantSharmaFr
 
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...Call Girls in Nagpur High Profile
 
UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performancesivaprakash250
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxfenichawla
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Christo Ananth
 

Dernier (20)

Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
 
Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024
 
AKTU Computer Networks notes --- Unit 3.pdf
AKTU Computer Networks notes ---  Unit 3.pdfAKTU Computer Networks notes ---  Unit 3.pdf
AKTU Computer Networks notes --- Unit 3.pdf
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdf
 
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
 
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
 
Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)
 
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
 
Generative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTGenerative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPT
 
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
 
Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...
 
Thermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptThermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.ppt
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
 
Unleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapUnleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leap
 
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
 
UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performance
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
 
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
 

Redux Deep Dive - ReactFoo Pune 2018