SlideShare uma empresa Scribd logo
1 de 49
Baixar para ler offline
SWITCHING TO REACT.JS
FROM ANGULARJS DEVELOPER
EUGENE ZHARKOV
https://twitter.com/soprano/status/610867662797807617
COMPONENT CREATION
ES5 ES6+
var	Photo	=	React.createClass({	
		handleDoubleTap:	function(e)	{	…	},	
		render:	function()	{	…	},	
});
class	Photo	extends	React.Component	{	
		handleDoubleTap(e)	{	…	}	
		render()	{	…	}	
}
COMPONENT INITIALIZATION
ES5 ES6+
var	EmbedModal	=	React.createClass({	
		componentWillMount:	function()	{	…	},	
});
class	EmbedModal	extends	React.Component	
{	
		constructor(props)	{	
				super(props);	
				//	default	state	props	
		}	
}
EVENT CONTEXT
ES5 ES6+
var	PostInfo	=	React.createClass({	
		handleOptionsButtonClick:	function(e)	{	
				this.setState({showOptionsModal:	true});	
		},	
});	
class	PostInfo	extends	React.Component	{	
		constructor(props)	{	
				super(props);	
				this.handleOptionsButtonClick	=	
this.handleOptionsButtonClick.bind(this);	
		}	
		handleOptionsButtonClick(e)	{	
				this.setState({showOptionsModal:	true});	
		}	
}
ES6+ ARROW FUNCTION
ES6+
class	PostInfo	extends	React.Component	{	
		handleOptionsButtonClick	=	(e)	=>	{	
				this.setState({showOptionsModal:	true});	
		}	
}
ES6+ DESTRUCTURING & JSX SPREAD ATTRIBUTES
ES6+
class	AutoloadingPostsGrid	extends	React.Component	{	
		render()	{	
				var	{	
						className,	
						...others,		//	contains	all	properties	of	this.props	except	for	className	
				}	=	this.props;	
				return	(	
						<div	className={className}>	
								<PostsGrid	{...others}	/>	
								<button	onClick={this.handleLoadMoreClick}>Load	more</button>	
						</div>	
				);	
		}	
}
BUILD TOOLS
▸ babel
▸ browserify
▸ babelify (babel transpiler)
▸ watchify (files watch)
▸ factor-bundle (bundle splitting)
▸ deAMDify (AMD support)
▸ webpack…
BROWSERIFY CLI EXAMPLE
watchify	-t	babelify	app/js/index.js	-o	public/js/bundle.js
BROWSERIFY JS EXAMPLE
browserify({	debug:	true	})	
		.transform(babelify);	
————————-————————-————————-————————-————————-	
var	fs	=	require("fs");	
var	browserify	=	require("browserify");	
var	babelify	=	require("babelify");	
browserify({	debug:	true	})	
		.transform(babelify)	
		.require("./script.js",	{	entry:	true	})	
		.bundle()	
		.on("error",	function	(err)	{	console.log("Error:	"	+	err.message);	})	
		.pipe(fs.createWriteStream("bundle.js"));
WEB PACK JS EXAMPLE
module:	{	
		loaders:	[	
				{	test:	/.js$/,	exclude:	/node_modules/,	loader:	"babel-loader"}	
		]	
}
BYE BYE
DIRECTIVES & CONTROLLERS
TRUE LIE
ANGULAR DIRECTIVE BUTTHURT
myModule.directive('directiveName',	function	factory(injectables)	{	
		var	directiveDefinitionObject	=	{	
				priority:	0,	
				template:	'<div></div>',	//	or	//	function(tElement,	tAttrs)	{	...	},	
				//	or	templateUrl:	'directive.html',	//	or	//	function(tElement,	tAttrs)	{	...	},	
				transclude:	false,	
				restrict:	'A',	
				templateNamespace:	'html',	
				scope:	false,	
				controller:	function($scope,	$element,	$attrs,	$transclude,	otherInjectables)	{	...	},	
				controllerAs:	'stringIdentifier',	
				bindToController:	false,	
				require:	'siblingDirectiveName',	//	or	//	['^parentDirectiveName',	'?optionalDirectiveName',	'?
^optionalParent'],	
				compile:	function	compile(tElement,	tAttrs,	transclude)	{	
						return	{	
								pre:	function	preLink(scope,	iElement,	iAttrs,	controller)	{	...	},	
								post:	function	postLink(scope,	iElement,	iAttrs,	controller)	{	...	}	
						}	
						//	or	//	return	function	postLink(	...	)	{	...	}	
				},	
				//	or	//	link:	{	
				//		pre:	function	preLink(scope,	iElement,	iAttrs,	controller)	{	...	},	
				//		post:	function	postLink(scope,	iElement,	iAttrs,	controller)	{	...	}	
				//	}	
				//	or	//	link:	function	postLink(	...	)	{	...	}	
		};	
		return	directiveDefinitionObject;	
});
ANGULAR DIRECTIVE BUTTHURT
$compile	
$scope	
					$element	
													$attrs	
																			$transclude	
																														$watch
REACT.JS SOBRIETY
export	default	class	Feature	extends	React.Component	{	
		componentDidMount	()	{	...	}	
		componentWillReceiveProps	()	{	...	}	
		shouldComponentUpdate	()	{	...	}	
		componentWillUpdate	()	{	...	}	
		componentDidUpdate	()	{	...	}	
		componentWillUnmount	()	{	...	}	
		render()	{	...	}	
}
JSX
var	Nav,	Profile;	
//	Input	(JSX):	
var	app	=	<Nav	color="blue"><Profile>click</Profile></Nav>;	
//	Output	(JS):	
var	app	=	React.createElement(	
		Nav,	
		{color:"blue"},	
		React.createElement(Profile,	null,	"click")	
);
REACT.JS COMPONENT EXAMPLE
export	default	class	CaseStudyHeader	extends	React.Component	{	
		render()	{	
				let	headerStyle	=	{color:	this.props.globalStyles.color};	
				let	containerStyle	=	{backgroundColor:	this.props.bgColor};	
				return	<div	className="case-study-header"	style={containerStyle}>	
						<h5	style={headerStyle}>Case	Study</h5>	
						<h2>{this.props.caption}</h2>	
						<p	dangerouslySetInnerHTML={{__html:	this.props.bodyText}}></p>	
						<img	src={this.props.imageSrc}	/>	
				</div>	
		}	
}
REACT.JS PARENT COMPONENT EXAMPLE
export	default	class	HomePage	extends	React.Component	{	
		render()	{	
				return	<article>	
						{	Data.page.map(function	(item,	i)	{	
								switch(item.type)	{	
										case	'caseStudyHeader':	
												return	<CaseStudyHeader	{...item}	globalStyles={Data.globalStyles}	key={i}	/>	
										case	'centeredImageBlock':	
												return	<CenteredImageBlock	{...item}	globalStyles={Data.globalStyles}	key={i}	/>	
										case	'notaBene':	
												return	<NotaBeneBlock	{...item}	globalStyles={Data.globalStyles}	key={i}	/>	
										case	'imageSeparator':	
												return	<ImageSeparator	{...item}	globalStyles={Data.globalStyles}	key={i}	/>	
										case	'article':	
												return	<Article	{...item}	globalStyles={Data.globalStyles}	key={i}	/>	
								}	
						},	this)}	
				</article>	
		}	
}
REACT.JS ‘CUSTOM CONTROL’ USAGE
<Radiogroup	options={RADIOGROUP_YES_NO}		
												onChange={this.onSomeChange.bind(this)}	/>
REACT.JS ‘CUSTOM CONTROL’
export	default	class	Radiogroup	extends	React.Component	{	
		onChange(e)	{	
				this.props.onChange(e.currentTarget.value);	
		}	
		render	()	{	
				let	source	=	this.props.options;	
				let	name	=	shortid.generate();	
				return	<div>	
						{source.map(function	(item,	i)	{	
								let	id	=	name	+	i;	
								return	<span	key={i}><input	type="radio"	name={name}	id={id}	value={item.value}	
																															onChange={this.onChange.bind(this)}	/>	
										<label	htmlFor={id}><span	className="control"></span>	{item.title}</label></span>	
						},	this)}	
				</div>	
		}	
}
INLINE STYLES
var	divStyle	=	{	
		color:	'white',	
		backgroundImage:	'url('	+	imgUrl	+	')',	
		WebkitTransition:	'all',	//	note	the	capital	'W'	here	
		msTransition:	'all'	//	'ms'	is	the	only	lowercase	vendor	prefix	
};	
ReactDOM.render(<div	style={divStyle}>Hello	World!</div>,	mountNode);
MATERIAL UI
THEME MANAGER
checkbox:	{	
		boxColor:	rawTheme.palette.textColor,	
		checkedColor:	rawTheme.palette.primary1Color,	
		requiredColor:	rawTheme.palette.primary1Color,	
		disabledColor:	rawTheme.palette.disabledColor,	
		labelColor:	rawTheme.palette.textColor,	
		labelDisabledColor:	rawTheme.palette.disabledColor,	
},	
datePicker:	{	
		color:	rawTheme.palette.primary1Color,	
		textColor:	rawTheme.palette.alternateTextColor,	
		calendarTextColor:	rawTheme.palette.textColor,	
		selectColor:	rawTheme.palette.primary2Color,	
		selectTextColor:	rawTheme.palette.alternateTextColor,	
}
MATERIAL UI
COLORS
palette:	{	
				primary1Color:	Colors.cyan500,	
				primary2Color:	Colors.cyan700,	
				primary3Color:	Colors.lightBlack,	
				accent1Color:	Colors.pinkA200,	
				accent2Color:	Colors.grey100,	
				accent3Color:	Colors.grey500,	
				textColor:	Colors.darkBlack,	
				alternateTextColor:	Colors.white,	
				canvasColor:	Colors.white,	
				borderColor:	Colors.grey300,	
				disabledColor:	ColorManipulator.fade(Colors.darkBlack,	0.3),	
		}
MATERIAL UI
ICON-BUTTON
getStyles()	{	
		const	{	
				iconSize,	
				textColor,	
				disabledColor,	
		}	=	this.constructor.getRelevantContextKeys(this.state.muiTheme);	
		let	styles	=	{	
				root:	{	
						position:	'relative',	
						boxSizing:	'border-box',	
						transition:	Transitions.easeOut(),	
						padding:	iconSize	/	2,	
						width:	iconSize	*	2,	
						height:	iconSize	*	2,	
						fontSize:	0,	
				}	
}
TEXT
POSTCSS
▸ PostCSS itself is very small. It includes only a CSS parser, a
CSS node tree API, a source map generator, and a node
tree stringifier.
▸ All of the style transformations are performed by plugins,
which are plain JS functions. Each plugin receives a CSS
node tree, transforms it & then returns the modified tree.
POSTCSS CLI
postcss	-o	public/css/style.css	-u	precss	-s	postcss-scss	app/css/index.scss	-w
ANGULARJS ROUTING
myApp.config(function($stateProvider,	$urlRouterProvider)	{	
		$urlRouterProvider.otherwise("/state1");	
		$stateProvider	
				.state('state1',	{	
						url:	"/state1",	
						templateUrl:	"partials/state1.html"	
				})	
				.state('state1.list',	{	
						url:	"/list",	
						templateUrl:	"partials/state1.list.html",	
						controller:	function($scope)	{	
								$scope.items	=	["A",	"List",	"Of",	"Items"];	
						}	
				})	
				.state('route2',	{	
						url:	"/route2",	
						views:	{	
								"viewA":	{	template:	"route2.viewA"	},	
								"viewB":	{	template:	"route2.viewB"	}	
						}	
				})
REACT.JS ROUTING
<Router>	
		<Route	path="/"	component={App}>	
				<Route	path="about"	component={About}/>	
				<Route	path="users"	component={Users}>	
						<Route	path="/user/:userId"	component={User}/>	
				</Route>	
				<Route	path="*"	component={NoMatch}/>	
		</Route>	
</Router>
REACT.JS ROUTING HISTORY
const	createBrowserHistory	=	require('history/lib/createBrowserHistory');	
ReactDOM.render	((		
	<Router	history={createBrowserHistory()}>	
			...	
	</Router>		
),	document.body);
WORKING WITH DATA
FLUX
WORKING WITH DATA
FLUX
▸ Single Dispatcher
▸ Central hub that manages all data flow. A Simple
mechanism for distributing the actions to the stores.
▸ Stores
▸ Stores contain the application state and logic. Their role
is somewhat similar to a model in a traditional MVC, but
they manage the state of many objects — they do not
represent a single record of data like ORM models do.
WORKING WITH DATA
FLUX
▸ Actions
▸ The dispatcher exposes a method that allows us to trigger a
dispatch to the stores, and to include a payload of data, which we
call an action.
▸ Views
▸ When it receives the event from the store, it first requests the new
data it needs via the stores' public getter methods. It then calls its
own setState() or forceUpdate() methods, causing its render()
method and the render() method of all its descendants to run.
WORKING WITH DATA
FLUX
▸ myapp
▸ …
▸ js
▸ actions
▸ components
▸ constants
▸ dispatcher
▸ stores
▸ index.html
WORKING WITH DATA
REDUX
WORKING WITH DATA
REDUX, MORE SCARY DIAGRAM
WORKING WITH DATA
REDUX PRINCIPLES
▸ Single store = Single application state
▸ Read-only state
▸ Mutations are written as pure functions
WORKING WITH DATA
REDUX
▸ myapp
▸ js
▸ actions
▸ components
▸ constants
▸ reducers
▸ routes
▸ stores
▸ index.html
REDUX
REDUCER
function	posts(state	=	{	
		isFetching:	false,	didInvalidate:	false,	items:	[]	},	action)	{	
		switch	(action.type)	{	
		case	INVALIDATE_REDDIT:	
				return	Object.assign({},	state,	{	
						didInvalidate:	true	
				});	
		case	REQUEST_POSTS:	
				return	Object.assign({},	state,	{	
						isFetching:	true,	
						didInvalidate:	false	
				});	
		case	RECEIVE_POSTS:	
				return	Object.assign({},	state,	{	
						isFetching:	false,	
						didInvalidate:	false,	
						items:	action.posts,	
						lastUpdated:	action.receivedAt	
				});	
		default:	
				return	state;	
		}	
}
REDUX
ACTIONS
function	requestPosts(reddit)	{	
		return	{	
				type:	REQUEST_POSTS,	
				reddit	
		};	
}	
function	receivePosts(reddit,	json)	{	
		return	{	
				type:	RECEIVE_POSTS,	
				reddit,	
				posts:	json.data.children.map(child	=>	child.data),	
				receivedAt:	Date.now()	
		};	
}	
export	function	fetchPosts(reddit)	{	
		return	dispatch	=>	{	
				dispatch(requestPosts(reddit));	
				return	fetch(`http://www.reddit.com/r/${reddit}.json`)	
						.then(req	=>	req.json())	
						.then(json	=>	dispatch(receivePosts(reddit,	json)));	
		};	
}
REDUX
STORE
import	{	createStore,	applyMiddleware	}	from	'redux';	
import	thunkMiddleware	from	'redux-thunk';	
import	createLogger	from	'redux-logger';	
import	rootReducer	from	'./reducers';	
const	loggerMiddleware	=	createLogger();	
const	createStoreWithMiddleware	=	applyMiddleware(	
		thunkMiddleware,	
		loggerMiddleware	
)(createStore);	
export	default	function	configureStore(initialState)	{	
		return	createStoreWithMiddleware(rootReducer,	initialState);	
}
REDUX
ROOT OBJECT
import	React,	{	Component	}	from	'react';	
import	{	Provider	}	from	'react-redux';	
import	configureStore	from	'../configureStore';	
import	AsyncApp	from	'./AsyncApp';	
const	store	=	configureStore();	
export	default	class	Root	extends	Component	{	
		render()	{	
				return	(	
						<Provider	store={store}>	
								<AsyncApp	/>	
						</Provider>	
				);	
		}	
}
REDUX
SMART COMPONENT
import	React,	{	Component,	PropTypes	}	from	'react';	
import	{	connect	}	from	'react-redux';	
import	{	selectReddit,	fetchPosts,	invalidateReddit	}	from	'../actions';	
class	AsyncApp	extends	Component	{	
		constructor(props)	{	
				super(props);	
				this.handleChange	=	this.handleChange.bind(this);	
				this.handleRefreshClick	=	this.handleRefreshClick.bind(this);	
		}	
		componentDidMount()	{	
				const	{	dispatch,	selectedReddit	}	=	this.props;	
				dispatch(fetchPosts());	
		}	
		handleChange(nextReddit)	{	
				this.props.dispatch(selectReddit(nextReddit));	
		}	
		render	()	{	
				const	{	selectedReddit,	posts,	isFetching,	lastUpdated	}	=	this.props;	
				return	(…………)	
		}	
}
REDUX
SMART COMPONENT
function	mapStateToProps(state)	{	
		const	{	selectedReddit,	postsByReddit	}	=	state;	
		const	{	
				isFetching,	
				lastUpdated,	
				items:	posts	
		}	=	postsByReddit[selectedReddit]	||	{	
				isFetching:	true,	
				items:	[]	
		};	
		return	{	
				selectedReddit,	
				posts,	
				isFetching,	
				lastUpdated	
		};	
}	
export	default	connect(mapStateToProps)(AsyncApp);
REDUX? I KNOW NOTHING
ABOUT REDUX.
DUMB COMPONENT
TEXT
TEXT
REDUX THUNK
▸ Redux Thunk middleware allows you to write action
creators that return a function instead of an action.
TEXT
LINKS
▸ davezuko / react-redux-starter-kit
▸ emmenko / redux-react-router-async-example
▸ official documentation
TEXT
LINKS
▸ davezuko / react-redux-starter-kit
▸ emmenko / redux-react-router-async-example
▸ official documentation
QUESTIONS
?
THANK YOU
@2J2E
EU.ZHARKOV@GMAIL.COM!

Mais conteúdo relacionado

Mais procurados

React.js and Redux overview
React.js and Redux overviewReact.js and Redux overview
React.js and Redux overviewAlex Bachuk
 
React, Redux, ES2015 by Max Petruck
React, Redux, ES2015   by Max PetruckReact, Redux, ES2015   by Max Petruck
React, Redux, ES2015 by Max PetruckMaksym Petruk
 
React JS and Redux
React JS and ReduxReact JS and Redux
React JS and ReduxGlib Kechyn
 
ReactJs presentation
ReactJs presentationReactJs presentation
ReactJs presentationnishasowdri
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux IntroductionNikolaus Graf
 
Introduction to React & Redux
Introduction to React & ReduxIntroduction to React & Redux
Introduction to React & ReduxBoris Dinkevich
 
React for Dummies
React for DummiesReact for Dummies
React for DummiesMitch Chen
 
React + Redux. Best practices
React + Redux.  Best practicesReact + Redux.  Best practices
React + Redux. Best practicesClickky
 
Quick start with React | DreamLab Academy #2
Quick start with React | DreamLab Academy #2Quick start with React | DreamLab Academy #2
Quick start with React | DreamLab Academy #2DreamLab
 
Better React state management with Redux
Better React state management with ReduxBetter React state management with Redux
Better React state management with ReduxMaurice De Beijer [MVP]
 
React.js or why DOM finally makes sense
React.js or why DOM finally makes senseReact.js or why DOM finally makes sense
React.js or why DOM finally makes senseEldar Djafarov
 
An Introduction to ReactJS
An Introduction to ReactJSAn Introduction to ReactJS
An Introduction to ReactJSAll Things Open
 

Mais procurados (20)

React.js and Redux overview
React.js and Redux overviewReact.js and Redux overview
React.js and Redux overview
 
Redux vs Alt
Redux vs AltRedux vs Alt
Redux vs Alt
 
Intro to ReactJS
Intro to ReactJSIntro to ReactJS
Intro to ReactJS
 
React, Redux, ES2015 by Max Petruck
React, Redux, ES2015   by Max PetruckReact, Redux, ES2015   by Max Petruck
React, Redux, ES2015 by Max Petruck
 
React JS and Redux
React JS and ReduxReact JS and Redux
React JS and Redux
 
ReactJs presentation
ReactJs presentationReactJs presentation
ReactJs presentation
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
 
React & Redux
React & ReduxReact & Redux
React & Redux
 
React with Redux
React with ReduxReact with Redux
React with Redux
 
Introduction to React & Redux
Introduction to React & ReduxIntroduction to React & Redux
Introduction to React & Redux
 
React for Dummies
React for DummiesReact for Dummies
React for Dummies
 
React + Redux. Best practices
React + Redux.  Best practicesReact + Redux.  Best practices
React + Redux. Best practices
 
React redux
React reduxReact redux
React redux
 
React on es6+
React on es6+React on es6+
React on es6+
 
Quick start with React | DreamLab Academy #2
Quick start with React | DreamLab Academy #2Quick start with React | DreamLab Academy #2
Quick start with React | DreamLab Academy #2
 
React & Redux
React & ReduxReact & Redux
React & Redux
 
Better React state management with Redux
Better React state management with ReduxBetter React state management with Redux
Better React state management with Redux
 
React.js or why DOM finally makes sense
React.js or why DOM finally makes senseReact.js or why DOM finally makes sense
React.js or why DOM finally makes sense
 
React js
React jsReact js
React js
 
An Introduction to ReactJS
An Introduction to ReactJSAn Introduction to ReactJS
An Introduction to ReactJS
 

Semelhante a Switch to React.js from AngularJS developer

Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Robert DeLuca
 
Universal Javascript in React
Universal Javascript in ReactUniversal Javascript in React
Universal Javascript in ReactApptension
 
JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"GeeksLab Odessa
 
Higher Order Components and Render Props
Higher Order Components and Render PropsHigher Order Components and Render Props
Higher Order Components and Render PropsNitish Phanse
 
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3Rob Tweed
 
JS Fest 2019. Glenn Reyes. With great power comes great React hooks!
JS Fest 2019. Glenn Reyes. With great power comes great React hooks!JS Fest 2019. Glenn Reyes. With great power comes great React hooks!
JS Fest 2019. Glenn Reyes. With great power comes great React hooks!JSFestUA
 
Building user interface with react
Building user interface with reactBuilding user interface with react
Building user interface with reactAmit Thakkar
 
React & The Art of Managing Complexity
React &  The Art of Managing ComplexityReact &  The Art of Managing Complexity
React & The Art of Managing ComplexityRyan Anklam
 
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
 
Gutenberg sous le capot, modules réutilisables
Gutenberg sous le capot, modules réutilisablesGutenberg sous le capot, modules réutilisables
Gutenberg sous le capot, modules réutilisablesRiad Benguella
 
Advance Java Programs skeleton
Advance Java Programs skeletonAdvance Java Programs skeleton
Advance Java Programs skeletonIram Ramrajkar
 
React 16: new features and beyond
React 16: new features and beyondReact 16: new features and beyond
React 16: new features and beyondArtjoker
 
[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation洪 鹏发
 
Intro to React | DreamLab Academy
Intro to React | DreamLab AcademyIntro to React | DreamLab Academy
Intro to React | DreamLab AcademyDreamLab
 
Enhance react app with patterns - part 1: higher order component
Enhance react app with patterns - part 1: higher order componentEnhance react app with patterns - part 1: higher order component
Enhance react app with patterns - part 1: higher order componentYao Nien Chung
 

Semelhante a Switch to React.js from AngularJS developer (20)

React lecture
React lectureReact lecture
React lecture
 
Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React
 
Universal Javascript in React
Universal Javascript in ReactUniversal Javascript in React
Universal Javascript in React
 
JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"JSLab. Алексей Волков. "React на практике"
JSLab. Алексей Волков. "React на практике"
 
Higher Order Components and Render Props
Higher Order Components and Render PropsHigher Order Components and Render Props
Higher Order Components and Render Props
 
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
 
JS Fest 2019. Glenn Reyes. With great power comes great React hooks!
JS Fest 2019. Glenn Reyes. With great power comes great React hooks!JS Fest 2019. Glenn Reyes. With great power comes great React hooks!
JS Fest 2019. Glenn Reyes. With great power comes great React hooks!
 
Building user interface with react
Building user interface with reactBuilding user interface with react
Building user interface with react
 
React & The Art of Managing Complexity
React &  The Art of Managing ComplexityReact &  The Art of Managing Complexity
React & The Art of Managing Complexity
 
Workshop React.js
Workshop React.jsWorkshop React.js
Workshop React.js
 
From Swing to JavaFX
From Swing to JavaFXFrom Swing to JavaFX
From Swing to JavaFX
 
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.
 
Gutenberg sous le capot, modules réutilisables
Gutenberg sous le capot, modules réutilisablesGutenberg sous le capot, modules réutilisables
Gutenberg sous le capot, modules réutilisables
 
Advance Java Programs skeleton
Advance Java Programs skeletonAdvance Java Programs skeleton
Advance Java Programs skeleton
 
React hooks
React hooksReact hooks
React hooks
 
React 16: new features and beyond
React 16: new features and beyondReact 16: new features and beyond
React 16: new features and beyond
 
[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation
 
React outbox
React outboxReact outbox
React outbox
 
Intro to React | DreamLab Academy
Intro to React | DreamLab AcademyIntro to React | DreamLab Academy
Intro to React | DreamLab Academy
 
Enhance react app with patterns - part 1: higher order component
Enhance react app with patterns - part 1: higher order componentEnhance react app with patterns - part 1: higher order component
Enhance react app with patterns - part 1: higher order component
 

Mais de Eugene Zharkov

Monorepo: React + React Native. React Alicante
Monorepo:  React + React Native. React Alicante Monorepo:  React + React Native. React Alicante
Monorepo: React + React Native. React Alicante Eugene Zharkov
 
Monorepo: React Web & React Native
Monorepo: React Web & React NativeMonorepo: React Web & React Native
Monorepo: React Web & React NativeEugene Zharkov
 
Create React Native App vs Expo vs Manually
Create React Native App vs Expo vs ManuallyCreate React Native App vs Expo vs Manually
Create React Native App vs Expo vs ManuallyEugene Zharkov
 
Build automation with Fastlane
Build automation with FastlaneBuild automation with Fastlane
Build automation with FastlaneEugene Zharkov
 
React Native Animation
React Native AnimationReact Native Animation
React Native AnimationEugene Zharkov
 
React Native: Hurdle Race
React Native: Hurdle RaceReact Native: Hurdle Race
React Native: Hurdle RaceEugene Zharkov
 
Burn your grass with react native
Burn your grass with react nativeBurn your grass with react native
Burn your grass with react nativeEugene Zharkov
 
Фронтенд сказки
Фронтенд сказкиФронтенд сказки
Фронтенд сказкиEugene Zharkov
 
How to be a good frontend developer
How to be a good frontend developerHow to be a good frontend developer
How to be a good frontend developerEugene Zharkov
 
Cycle.js: Functional and Reactive
Cycle.js: Functional and ReactiveCycle.js: Functional and Reactive
Cycle.js: Functional and ReactiveEugene Zharkov
 
Что там в summary
Что там в summaryЧто там в summary
Что там в summaryEugene Zharkov
 
Mobile applications in a new way with React Native
Mobile applications in a new way with React NativeMobile applications in a new way with React Native
Mobile applications in a new way with React NativeEugene Zharkov
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переигралEugene Zharkov
 
Angular 2.0: Brighter future?
Angular 2.0: Brighter future?Angular 2.0: Brighter future?
Angular 2.0: Brighter future?Eugene Zharkov
 
Как объяснить на платьях процесс разработки?
Как объяснить на платьях процесс разработки?Как объяснить на платьях процесс разработки?
Как объяснить на платьях процесс разработки?Eugene Zharkov
 
Angular.JS: Do it right
Angular.JS: Do it rightAngular.JS: Do it right
Angular.JS: Do it rightEugene Zharkov
 
SignalR: Add real-time to your applications
SignalR: Add real-time to your applicationsSignalR: Add real-time to your applications
SignalR: Add real-time to your applicationsEugene Zharkov
 

Mais de Eugene Zharkov (20)

Monorepo: React + React Native. React Alicante
Monorepo:  React + React Native. React Alicante Monorepo:  React + React Native. React Alicante
Monorepo: React + React Native. React Alicante
 
Monorepo: React Web & React Native
Monorepo: React Web & React NativeMonorepo: React Web & React Native
Monorepo: React Web & React Native
 
Create React Native App vs Expo vs Manually
Create React Native App vs Expo vs ManuallyCreate React Native App vs Expo vs Manually
Create React Native App vs Expo vs Manually
 
Build automation with Fastlane
Build automation with FastlaneBuild automation with Fastlane
Build automation with Fastlane
 
GraphQL and/or REST
GraphQL and/or RESTGraphQL and/or REST
GraphQL and/or REST
 
React Native Animation
React Native AnimationReact Native Animation
React Native Animation
 
React Native: Hurdle Race
React Native: Hurdle RaceReact Native: Hurdle Race
React Native: Hurdle Race
 
Burn your grass with react native
Burn your grass with react nativeBurn your grass with react native
Burn your grass with react native
 
Фронтенд сказки
Фронтенд сказкиФронтенд сказки
Фронтенд сказки
 
How to be a good frontend developer
How to be a good frontend developerHow to be a good frontend developer
How to be a good frontend developer
 
Cycle.js: Functional and Reactive
Cycle.js: Functional and ReactiveCycle.js: Functional and Reactive
Cycle.js: Functional and Reactive
 
Что там в summary
Что там в summaryЧто там в summary
Что там в summary
 
Elm: give it a try
Elm: give it a tryElm: give it a try
Elm: give it a try
 
AngularJS: Good parts
AngularJS: Good partsAngularJS: Good parts
AngularJS: Good parts
 
Mobile applications in a new way with React Native
Mobile applications in a new way with React NativeMobile applications in a new way with React Native
Mobile applications in a new way with React Native
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переиграл
 
Angular 2.0: Brighter future?
Angular 2.0: Brighter future?Angular 2.0: Brighter future?
Angular 2.0: Brighter future?
 
Как объяснить на платьях процесс разработки?
Как объяснить на платьях процесс разработки?Как объяснить на платьях процесс разработки?
Как объяснить на платьях процесс разработки?
 
Angular.JS: Do it right
Angular.JS: Do it rightAngular.JS: Do it right
Angular.JS: Do it right
 
SignalR: Add real-time to your applications
SignalR: Add real-time to your applicationsSignalR: Add real-time to your applications
SignalR: Add real-time to your applications
 

Último

How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....ShaimaaMohamedGalal
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
 

Último (20)

How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 

Switch to React.js from AngularJS developer