SlideShare uma empresa Scribd logo
1 de 100
Baixar para ler offline
From Back to Front:
Rails to React Family
Khor Soon Hin, @neth_6
Outline
● React Family: ReactJS/Flux/RelayJS/GraphQL
● What makes them interesting?
● What are they? How they work together?
● How do I get started easily?
● Should I use them all?
● IMPORTANT: How to get them onto Rails
React/Flux/Relay/GraphQL: In A Sentence Each
● React: UI
● Flux: Data Flow
● GraphQL: Data Retrieval
● Relay: Component-Data Co-location
React/Flux/Relay/GraphQL: Common Goal
Improve software quality given the same development time
React/Flux/Relay/GraphQL: Common Goal
Improve software quality given the same development time
● Easy to understand & debug
● Less prone to error
React/Flux/Relay/GraphQL: Common Approach
Simplify abstraction to push common tasks/code organization to pattern/framework
React/Flux/Relay/GraphQL: Common Approach
Simplify abstraction to push common tasks/code organization to pattern/framework
● Easy to understand & debug
React/Flux/Relay/GraphQL: Common Approach
Simplify abstraction to push common tasks/code organization to pattern/framework
● Easy to understand & debug
● Less prone to error
React/Flux/Relay/GraphQL: Common Outcome
Functional/Declarative Programming
React: UI
React
● Single-Page Application (SPA)
Courtesy: https://facebook.github.io/react/docs/thinking-in-react.html
React (cont.)
● Single-Page Application (SPA)
● Cascading Views
React (cont.)
● Single-Page Application (SPA)
● Cascading Views
React (cont.)
Abstraction
Each React element knows:
● The data it needs
● How to render itself with HTML fragments
● The data it passes to its children
React (cont.)
● Single-Page Application (SPA)
● Cascading Views
Fetch
Data
React (cont.)
● Single-Page Application (SPA)
● Cascading Views
React (cont.)
● Single-Page Application (SPA)
● Cascading Views
React (cont.)
● Single-Page Application (SPA)
● Cascading Views
Uni-directional Flow
React (cont.)
● Single-Page Application (SPA)
● Cascading Views
Debug Upwards
React (cont.)
jQuery: You need to find all the pieces of code that modified the UI in error
React: User Interaction
ball
React: User Interaction (cont.)
ball
React: Data Change (cont.)
ball
React: User Interaction (cont.)
ball
React: User Interaction (cont.)
jQuery: You need to find element to modify and make modification
Imperative vs. Functional: Coding
● Imperative:
○ Example: jQuery code
■ Code is likely in a monolithic Javascript
■ Hold element ids for where each piece of data should be shown
■ Retrieves element and display data
■ Complex model requires customized code:
● Find pieces of data, and update pieces of element
● Functional:
○ Example: React code
■ Code is contained within each React element:
■ Each React element declares which part of data to pass on to children
■ Each React element declares how to render data it receives
■ Simplified model reduces code relinquish more to framework:
● Provide data to top view, and cascading views redraws themselves
Functional vs. Imperative: Benefits
● Imperative:
○ Complex model requires customized code
■ Dig through customized code to understand relationships
■ Different pieces of code to initialize UI, and update based on interaction
● Functional:
○ Simplified model reduces code relinquish more to framework
■ Relationship and data-flow is top-down
■ Same piece of code to initialize, and update UI
React On Rails
● https://github.com/reactjs/react-rails
● app/assets/javascripts/components/xxxxx.js
○ Dump all your React components related to xxxxx
React: Code
var DATA = [
{
category: 'Sporting Goods',
products: [
{price: '$49.99', stocked: true, name: 'Football'},
{price: '$9.99', stocked: true, name: 'Baseball'},
{price: '$29.99', stocked: false, name: 'Basketball'},
],
},
{
category: 'Electronics',
products: [
{price: '$99.99', stocked: true, name: 'iPod Touch'},
{price: '$399.99', stocked: false, name: 'iPhone 5'},
{price: '$199.99', stocked: true, name: 'Nexus 7'},
],
},
];
React: Code (cont.)
// Javascript required in app/assets/javascripts/application.js
ReactDOM.render(
<ProductTable data={DATA} />,
document.getElementById('container')
);
React: Code (cont.)
// app/assets/javascripts/components/product.jsx
var ProductTable = React.createClass(
render: function() {
var rows = [];
this.props.data.forEach(function(dataElem) {
rows.push(<ProductCategoryRow category={dataElem.category} … />);
dataElem.products.forEach(function(product) {
rows.push(<ProductRow product={product} … />);
});
...
var DATA = [
{
category: 'Sporting Goods',
products: [ {name: 'Football', ...}, {name: ’Baseball’, ... }, ... ],
},
{
category: 'Electronics',
products: [ {name: 'iPod Touch', ...}, {name: ‘iPhone 6’, …}, ... ],
},
];
React: Code (cont.)
// app/assets/javascripts/components/product.jsx
var ProductCategoryRow = React.createClass({
render: function() {
return (<tr><th>{this.props.category}</th></tr>);
}
});
React: Code (cont.)
// app/assets/javascripts/components/product.jsx
var ProductRow = React.createClass({
render: function() {
return (
<tr>
<td>{this.props.product.name}</td>
<td>{this.props.product.price}</td>
</tr>
);
}
});
React: Summary
Simplify abstraction
● UI
○ Shove data for entire UI from the top component
○ Each component render itself with data for self
○ Each component pass data to child
○ To change component, just change data
Framework
● Handle initializing/updating UI with the right pieces of data
How
● Re-drawing all UI pieces efficiently
Flux: Data Flow
React
Courtesy: https://facebook.github.io/react/docs/thinking-in-react.html
MVC
Courtesy: http://fluxxor.com/what-is-flux.html
Multiple Models/Domains
Chat
News
Summary
Friend
Requests
MVC Complexity
Explosion of flows
Courtesy: http://fluxxor.com/what-is-flux.html
MVC Complexity
Courtesy: http://fluxxor.com/what-is-flux.html
News
Summary
News
One model powering 2 views
MVC Complexity
Courtesy: http://fluxxor.com/what-is-flux.html
News
Summary
News
Friends
One model powering 2 views
Two models powering 1 view
MVC Complexity
Explosion of flows
Error in UI
MVC Complexity (cont.)
Explosion of flows
Error in UI
MVC Complexity (cont.)
Explosion of flows
Error in UI
MVC Complexity (cont.)
Explosion of flows
Error in UI
Tracing Loops
Difficult:
● Tons of log entries
○ Lots of things to look through
○ Scrolling is laggy
● Cannot just look at snapshot for messy loops
MVC Simple Loops
Error in UI
Tracing (if set
correctly) may tell you
where loop is
MVC Looping the Loop
Explosion of flows
Error in UI
Depending on where
you look in the trace,
you may think
orange or bold loop
A loop resulting
in another loop
MVC Simultaneous Loops
Explosion of flows
Error in UI
Tracing is difficult;
seeing two traces
A loop resulting in
multiple other
loops concurrently
Flux
Courtesy: http://fluxxor.com/what-is-flux.html
Trigger ActionAction Done
Action Done
State Update
Structured and self-contained
Flux (cont.)
Courtesy: http://fluxxor.com/what-is-flux.html
Take ActionAction Done
Action Done
State Update
● Throttles one Action at a time
● waitsFor()
● Synchronous tasks only
● State and logic co-located
Flux (cont.)
Courtesy: http://fluxxor.com/what-is-flux.html
register register
With Flux
Courtesy: http://fluxxor.com/what-is-flux.html
Side-by-side
MVC Flux
Side-by-side
● Structured growth (no path explosion):
○ Parallel stores lead to single top view
MVC Flux
Side-by-side
● Structured growth (no path explosion):
○ Parallel stores lead to single top view
○ Single-parent cascading views
MVC Flux
React
Side-by-side
● Structured growth (no path explosion):
○ Parallel stores lead to single top view
○ Single-parent cascading views
● Controllers-Models collapsed into Stores to co-
locate logic & state
MVC Flux
React
Store
Store
With Flux
Error in UI
Only one trace at a
time
● Dispatcher throttles Actions
A loop resulting in
multiple other
loops concurrently
With Flux
Error in UI
register
register
With Flux
Error in UI
register
register
Todo App
New Todo
Create
Todo #1
Todo #2
Created Todo List
Action Creator Trigger
<form>
<input id=’todo-text’ type=’text’ />
<button onClick=TodoActions.create($(‘#todo-text’).val())>Create</button>
</form>
Action Creator
TodoActions: {
create: function(text) {
// Take some action, e.g., call REST API
AppDispatcher.dispatch({
actionType: TodoConstants.TODO_CREATE, // Basically ‘create’
text: text
});
},
….
}
Dispatcher
AppDispatcher = require('flux').Dispatcher;
Store
AppDispatcher.register(function(action) { // action is passed in by Action Creator
var event = action.event;
switch(action.actionType) {
case TodoConstants.TODO_CREATE:
// Do whatever, e.g., update local store data or fetch fresh data from server
TodoStore.emitChange();
break;
….
}
}
register
Store (cont.)
var TodoStore = assign({}, EventEmitter.prototype, {
// EventEmitter provides emit, on, removeListener, etc. methods
addChangeListener: function(callback) {
this.on(CHANGE_EVENT, callback);
},
removeChangeListener: function(callback) {
this.removeListener(CHANGE_EVENT, callback);
},
emitChange: function() {
this.emit(CHANGE_EVENT);
},
...
}
register
Controller-View
// This is where React is used
var TodoApp = React.createClass({
componentDidMount: function() {
TodoStore.addChangeListener(this._onChange);
},
componentWillUnmount: function() {
TodoStore.removeChangeListener(this._onChange);
},
_onChange: function() {
this.setState(TodoStore.getData());
},
...
}
register
Flux: More Pattern than Framework
● Many implementations
● Flux:
○ By Facebook
● Redux:
○ Not pure Flux per se, but embraces its spirit
○ Server-side rendering built-in
○ Growing super-fast
● Alt:
○ Pure Flux compliant
○ Well-documented, great community
○ Server-side rendering built-in
Flux Documentation Quirks
● Uses native dispatcher, not the official Facebook dispatcher
○ Use official Facebook dispatcher
● Does not use Flux-Utils
○ Use Flux-Utils to create Stores without code duplication
Rails with pure Flux: https://medium.com/@khor/back-to-front-rails-to-facebook-s-flux-ae815f81b16c
GraphQL: Data Retrieval
GraphQL
I speak GraphQL
API Endpoint
GraphQL (cont.)
API Endpoint
query {
store(email: "admin@abc.com") {
name,
address
}
}
GraphQL (cont.)
API Endpoint
query {
store(email: "admin@abc.com") {
name,
address
}
}
store(email: “admin@abc.com”) {
name: ‘Hello Shop’,
address: ‘1-3-1 Aoyama’
}
GraphQL (cont.)
API Endpoint
query {
store(email: "admin@abc.com") {
categories {
name,
products {
name, price, stock
}
}
}
}
store {
categories: [
{ name: ‘Sporting Goods’,
products: [
{ name: ‘Football’, price:, stock: 50 }, …
}, ...
]
}
From React example
GraphQL (cont.)
API Endpoint
query {
store(email: "admin@abc.com") {
categories {
name,
products {
name, price, stock
}
}
}
}
store {
categories: [
{ name: ‘Sporting Goods’,
products: [
{ name: ‘Football’, price:, stock: 50 }, …
}, ...
]
}
Single
endpoint
Nested data
query
Client-specified
query
Data in 1
round-trip
GraphQL (cont.)
REST API:
● 3 endpoints:
○ Endpoint for Store
○ Endpoint for Category
○ Endpoint for Product
● Server-controlled query
○ Query for store returns email, name, address, etc. whether you want it or not
● Multiple round-trips vs. impure-REST/endpoint proliferation
○ Get Store, get each Category, get each Product in each Category
○ Lumping them together creates view-specific endpoints
GraphQL Enabled
https://github.com/rmosolgo/graphql-ruby
I speak GraphQL
API Endpoint
GraphQL: Schema
# app/graph/types/query_type.rb
field :store do
type StoreType # Shape of this type
argument :email, !types.String, "Email of Store owner"
...
# Retrieve data
resolve -> (obj, args, ctx) do
Store.find_by_email(args[:email]) # ActiveRecord stuff
end
end
query {
store(email: "admin@abc.com") {
name,
address
}
}
GraphQL: Schema (cont.)
# app/graph/types/store_type.rb
StoreType = GraphQL::ObjectType.define do
name "Store"
description "Store Data"
…
field :name, !types.String, "Store name" # From ActiveRecord field
field :address, !types.String, "Store address" # From ActiveRecord field
field :categories, !types[CategoryType], “Category list” # From ActiveRecord field
end
query {
store(email: "admin@abc.com") {
name,
address
}
}
GraphQL: Schema (cont.)
# app/graph/types/store_type.rb
StoreType = GraphQL::ObjectType.define do
name "Store"
description "Store Data"
…
field :name, !types.String, "Store name" # From ActiveRecord field
field :address, !types.String, "Store address" # From ActiveRecord field
field :categories, !types[CategoryType], “Category list” # From ActiveRecord field
end
query {
store(email: "admin@abc.com") {
categories {
name,
products {
name, price, stock
}
}
}
}
GraphQL: Schema (cont.)
# app/graph/types/category_type.rb
CategoryType = GraphQL::ObjectType.define do
name "Category"
description "Category Data"
…
field :name, !types.String, "Category name" # From ActiveRecord field
field :products, !types[ProductType], “Product list” # From ActiveRecord field
...
end
query {
store(email: "admin@abc.com") {
categories {
name,
products {
name, price, stock
}
}
}
}
GraphQL: Summary
Simplify:
● Efficient request for data that you need from server endpoint
Framework
● A single API endpoint to respond to query
● Query language that enables client to specify data required, ala SQL
● No over-fetch
● Request all data in a single query
Relay: Component-Data Co-location
Relay: Declare Data
Relay: Declare Data
React: Recap (cont.)
Fetch
Data
(AJAX)
React: Recap (cont.)
React: Recap (cont.)
Relay: GraphQL Fetch Relay/GraphQL
Relay: Why Data Declaration? Pass All
Data
GraphQL/Relay Enabled
gem ‘graphql-ruby’
I speak GraphQL/Relay
API Endpoint
gem ‘graphql-relay-ruby’
Relay Layer
‘react-relay’
Relay/GraphQL on Rails
Relay/GraphQL on Rails: https://medium.com/@khor/relay-facebook-on-rails-8b4af2057152
Relay: Summary
Simplify
● Data fetching related stuff
○ Show ‘Loading….’
○ Data re-fetching
○ Caching
■ Figuring out batching, reading/writing caching, fetching only missing pieces
■ NOTE: Caching is NOT new but handling caching for hierarchical data is rather new
○ Managing errors, retry failed requests
○ Optimistic updates
○ Pagination
Framework
● Use GraphQL to fetch all required data declaratively
● Handle all the above
How To Get Started Easily?
● Make one piece of UI React
● Make another piece React
● Repeat until SPA
Which Should I Use
Partly from: https://facebook.github.io/react/blog/2015/02/20/introducing-relay-and-graphql.html
Flux Relay/GraphQL
Multiple stores (one per domain) Single store (GraphQL server)
Explicit subscription Implied subscription based on data required
Actions (possibly with AJAX) Mutations (query with changes)
REST API pros, and cons Efficient data handling (batching, caching,
no over-fetching, etc.)
More customized coding Generic framework for data access,
updates, etc.
Prefer imperative debugging Love magic, abstractions, and puzzle
debugging
Other Stuff
● React
○ Must all user-interaction go to top? Must top do all data manipulation?
● GraphQL
○ Can I just use GraphQL? Do I need Relay?
● Relay
○ How to modify Model without AJAX?
○ There is no gem?
Thank You!
Primary Resources
Thinking in React: https://facebook.github.io/react/docs/thinking-in-react.html
Flux Best Practices: https://facebook.github.io/flux/docs/flux-utils.html
Nested Relay Components: https://facebook.github.io/react/blog/2015/03/19/building-the-facebook-news-feed-with-relay.html
Practical Resources
Rails with pure Flux: https://medium.com/@khor/back-to-front-rails-to-facebook-s-flux-ae815f81b16c
Relay/GraphQL on Rails: https://medium.com/@khor/relay-facebook-on-rails-8b4af2057152
Relay/GraphQL Rails Starter Kit: https://github.com/nethsix/relay-on-rails
References
Flux Comparisons:
● https://medium.com/social-tables-tech/we-compared-13-top-flux-implementations-you-won-t-believe-
who-came-out-on-top-1063db32fe73
● http://jamesknelson.com/which-flux-implementation-should-i-use-with-react/
Introduction to GraphQL: http://facebook.github.io/react/blog/2015/02/20/introducing-relay-and-graphql.html
Thinking In GraphQL: https://facebook.github.io/relay/docs/thinking-in-graphql.html
Thinking In Relay: https://facebook.github.io/relay/docs/thinking-in-relay.html

Mais conteúdo relacionado

Mais procurados

Dynamic Application Development by NodeJS ,AngularJS with OrientDB
Dynamic Application Development by NodeJS ,AngularJS with OrientDBDynamic Application Development by NodeJS ,AngularJS with OrientDB
Dynamic Application Development by NodeJS ,AngularJS with OrientDBApaichon Punopas
 
An Introduction to ReactJS
An Introduction to ReactJSAn Introduction to ReactJS
An Introduction to ReactJSAll Things Open
 
Reactive Type safe Webcomponents with skateJS
Reactive Type safe Webcomponents with skateJSReactive Type safe Webcomponents with skateJS
Reactive Type safe Webcomponents with skateJSMartin Hochel
 
Difference between java script and jquery
Difference between java script and jqueryDifference between java script and jquery
Difference between java script and jqueryUmar Ali
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux IntroductionNikolaus Graf
 
React Native Workshop - React Alicante
React Native Workshop - React AlicanteReact Native Workshop - React Alicante
React Native Workshop - React AlicanteIgnacio Martín
 
From Backbone to Ember and Back(bone) Again
From Backbone to Ember and Back(bone) AgainFrom Backbone to Ember and Back(bone) Again
From Backbone to Ember and Back(bone) Againjonknapp
 
ReactJs presentation
ReactJs presentationReactJs presentation
ReactJs presentationnishasowdri
 
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점Jeado Ko
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsMike Subelsky
 
REACT.JS : Rethinking UI Development Using JavaScript
REACT.JS : Rethinking UI Development Using JavaScriptREACT.JS : Rethinking UI Development Using JavaScript
REACT.JS : Rethinking UI Development Using JavaScriptDeepu S Nath
 
AngularJS for Java Developers
AngularJS for Java DevelopersAngularJS for Java Developers
AngularJS for Java DevelopersLoc Nguyen
 
Client Side rendering Not so Easy
Client Side rendering Not so EasyClient Side rendering Not so Easy
Client Side rendering Not so Easynuria_ruiz
 

Mais procurados (20)

Dynamic Application Development by NodeJS ,AngularJS with OrientDB
Dynamic Application Development by NodeJS ,AngularJS with OrientDBDynamic Application Development by NodeJS ,AngularJS with OrientDB
Dynamic Application Development by NodeJS ,AngularJS with OrientDB
 
Jsf Ajax
Jsf AjaxJsf Ajax
Jsf Ajax
 
An Introduction to ReactJS
An Introduction to ReactJSAn Introduction to ReactJS
An Introduction to ReactJS
 
Reactive Type safe Webcomponents with skateJS
Reactive Type safe Webcomponents with skateJSReactive Type safe Webcomponents with skateJS
Reactive Type safe Webcomponents with skateJS
 
Difference between java script and jquery
Difference between java script and jqueryDifference between java script and jquery
Difference between java script and jquery
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
 
React Native Workshop - React Alicante
React Native Workshop - React AlicanteReact Native Workshop - React Alicante
React Native Workshop - React Alicante
 
From Backbone to Ember and Back(bone) Again
From Backbone to Ember and Back(bone) AgainFrom Backbone to Ember and Back(bone) Again
From Backbone to Ember and Back(bone) Again
 
Intro to ReactJS
Intro to ReactJSIntro to ReactJS
Intro to ReactJS
 
ReactJs presentation
ReactJs presentationReactJs presentation
ReactJs presentation
 
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web Apps
 
Wt unit 5 client &amp; server side framework
Wt unit 5 client &amp; server side frameworkWt unit 5 client &amp; server side framework
Wt unit 5 client &amp; server side framework
 
REACT.JS : Rethinking UI Development Using JavaScript
REACT.JS : Rethinking UI Development Using JavaScriptREACT.JS : Rethinking UI Development Using JavaScript
REACT.JS : Rethinking UI Development Using JavaScript
 
React & Redux
React & ReduxReact & Redux
React & Redux
 
Angular js
Angular jsAngular js
Angular js
 
EVOLVE'14 | Enhance | Gabriel Walt | Sightly Component Development
EVOLVE'14 | Enhance | Gabriel Walt | Sightly Component DevelopmentEVOLVE'14 | Enhance | Gabriel Walt | Sightly Component Development
EVOLVE'14 | Enhance | Gabriel Walt | Sightly Component Development
 
AngularJS for Java Developers
AngularJS for Java DevelopersAngularJS for Java Developers
AngularJS for Java Developers
 
Client Side rendering Not so Easy
Client Side rendering Not so EasyClient Side rendering Not so Easy
Client Side rendering Not so Easy
 

Destaque

RMSLE cost function
RMSLE cost functionRMSLE cost function
RMSLE cost functionKhor SoonHin
 
Gentlest Introduction to Tensorflow - Part 2
Gentlest Introduction to Tensorflow - Part 2Gentlest Introduction to Tensorflow - Part 2
Gentlest Introduction to Tensorflow - Part 2Khor SoonHin
 
Gentlest Introduction to Tensorflow
Gentlest Introduction to TensorflowGentlest Introduction to Tensorflow
Gentlest Introduction to TensorflowKhor SoonHin
 
Gentlest Introduction to Tensorflow - Part 3
Gentlest Introduction to Tensorflow - Part 3Gentlest Introduction to Tensorflow - Part 3
Gentlest Introduction to Tensorflow - Part 3Khor SoonHin
 
Tokyo React.js #3 Meetup (ja): Missing Pages: ReactJS/GraphQL/RelayJS
Tokyo React.js #3 Meetup (ja): Missing Pages: ReactJS/GraphQL/RelayJSTokyo React.js #3 Meetup (ja): Missing Pages: ReactJS/GraphQL/RelayJS
Tokyo React.js #3 Meetup (ja): Missing Pages: ReactJS/GraphQL/RelayJSKhor SoonHin
 
ReactNativeを語る勉強会
ReactNativeを語る勉強会ReactNativeを語る勉強会
ReactNativeを語る勉強会yohei sugigami
 
Joins and Other Aggregation Enhancements Coming in MongoDB 3.2
Joins and Other Aggregation Enhancements Coming in MongoDB 3.2Joins and Other Aggregation Enhancements Coming in MongoDB 3.2
Joins and Other Aggregation Enhancements Coming in MongoDB 3.2MongoDB
 
Synchronizing application state using Virtual DOM trees
Synchronizing application state using Virtual DOM treesSynchronizing application state using Virtual DOM trees
Synchronizing application state using Virtual DOM treesJari Voutilainen
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to ReactYos Riady
 
Intro to Web Map APIs
Intro to Web Map APIsIntro to Web Map APIs
Intro to Web Map APIsYos Riady
 
Digitaalisesti vaikuttavaksi. @HelsinkiUniUX -projektin tarina
Digitaalisesti vaikuttavaksi. @HelsinkiUniUX  -projektin tarina Digitaalisesti vaikuttavaksi. @HelsinkiUniUX  -projektin tarina
Digitaalisesti vaikuttavaksi. @HelsinkiUniUX -projektin tarina University of Helsinki
 
Why and How to Use Virtual DOM
Why and How to Use Virtual DOMWhy and How to Use Virtual DOM
Why and How to Use Virtual DOMDaiwei Lu
 
React.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMReact.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMJimit Shah
 
LSTM 네트워크 이해하기
LSTM 네트워크 이해하기LSTM 네트워크 이해하기
LSTM 네트워크 이해하기Mad Scientists
 
React Native - Workshop
React Native - WorkshopReact Native - Workshop
React Native - WorkshopFellipe Chagas
 

Destaque (20)

RMSLE cost function
RMSLE cost functionRMSLE cost function
RMSLE cost function
 
Gentlest Introduction to Tensorflow - Part 2
Gentlest Introduction to Tensorflow - Part 2Gentlest Introduction to Tensorflow - Part 2
Gentlest Introduction to Tensorflow - Part 2
 
Gentlest Introduction to Tensorflow
Gentlest Introduction to TensorflowGentlest Introduction to Tensorflow
Gentlest Introduction to Tensorflow
 
Gentlest Introduction to Tensorflow - Part 3
Gentlest Introduction to Tensorflow - Part 3Gentlest Introduction to Tensorflow - Part 3
Gentlest Introduction to Tensorflow - Part 3
 
Tokyo React.js #3 Meetup (ja): Missing Pages: ReactJS/GraphQL/RelayJS
Tokyo React.js #3 Meetup (ja): Missing Pages: ReactJS/GraphQL/RelayJSTokyo React.js #3 Meetup (ja): Missing Pages: ReactJS/GraphQL/RelayJS
Tokyo React.js #3 Meetup (ja): Missing Pages: ReactJS/GraphQL/RelayJS
 
ReactNativeを語る勉強会
ReactNativeを語る勉強会ReactNativeを語る勉強会
ReactNativeを語る勉強会
 
Joins and Other Aggregation Enhancements Coming in MongoDB 3.2
Joins and Other Aggregation Enhancements Coming in MongoDB 3.2Joins and Other Aggregation Enhancements Coming in MongoDB 3.2
Joins and Other Aggregation Enhancements Coming in MongoDB 3.2
 
Synchronizing application state using Virtual DOM trees
Synchronizing application state using Virtual DOM treesSynchronizing application state using Virtual DOM trees
Synchronizing application state using Virtual DOM trees
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
 
React entry
React entryReact entry
React entry
 
Repaint & reflow
Repaint & reflowRepaint & reflow
Repaint & reflow
 
Intro to Web Map APIs
Intro to Web Map APIsIntro to Web Map APIs
Intro to Web Map APIs
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
 
Digitaalisesti vaikuttavaksi. @HelsinkiUniUX -projektin tarina
Digitaalisesti vaikuttavaksi. @HelsinkiUniUX  -projektin tarina Digitaalisesti vaikuttavaksi. @HelsinkiUniUX  -projektin tarina
Digitaalisesti vaikuttavaksi. @HelsinkiUniUX -projektin tarina
 
Why and How to Use Virtual DOM
Why and How to Use Virtual DOMWhy and How to Use Virtual DOM
Why and How to Use Virtual DOM
 
React.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMReact.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOM
 
Pjax 深入淺出
Pjax 深入淺出Pjax 深入淺出
Pjax 深入淺出
 
React
ReactReact
React
 
LSTM 네트워크 이해하기
LSTM 네트워크 이해하기LSTM 네트워크 이해하기
LSTM 네트워크 이해하기
 
React Native - Workshop
React Native - WorkshopReact Native - Workshop
React Native - Workshop
 

Semelhante a From Back to Front: Rails To React Family

Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]GDSC UofT Mississauga
 
GDSC NITS Presents Kickstart into ReactJS
GDSC NITS Presents Kickstart into ReactJSGDSC NITS Presents Kickstart into ReactJS
GDSC NITS Presents Kickstart into ReactJSPratik Majumdar
 
20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React NativeEric Deng
 
Comparing Angular and React JS for SPAs
Comparing Angular and React JS for SPAsComparing Angular and React JS for SPAs
Comparing Angular and React JS for SPAsJennifer Estrada
 
React JS: A Secret Preview
React JS: A Secret PreviewReact JS: A Secret Preview
React JS: A Secret Previewvaluebound
 
React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)Chiew Carol
 
React Native custom components
React Native custom componentsReact Native custom components
React Native custom componentsJeremy Grancher
 
Architecting single-page front-end apps
Architecting single-page front-end appsArchitecting single-page front-end apps
Architecting single-page front-end appsZohar Arad
 
The State of Front-end At CrowdTwist
The State of Front-end At CrowdTwistThe State of Front-end At CrowdTwist
The State of Front-end At CrowdTwistMark Fayngersh
 
OttawaJS - React
OttawaJS - ReactOttawaJS - React
OttawaJS - Reactrbl002
 
Introduction to React for Frontend Developers
Introduction to React for Frontend DevelopersIntroduction to React for Frontend Developers
Introduction to React for Frontend DevelopersSergio Nakamura
 
Turku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-componentsTurku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-componentsJames Stone
 
ASP.NEt MVC and Angular What a couple
ASP.NEt MVC and Angular What a coupleASP.NEt MVC and Angular What a couple
ASP.NEt MVC and Angular What a coupleAlexandre Marreiros
 
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsJeff Durta
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendVlad Fedosov
 
Angular kickstart slideshare
Angular kickstart   slideshareAngular kickstart   slideshare
Angular kickstart slideshareSaleemMalik52
 
Basic iOS Training with SWIFT - Part 4
Basic iOS Training with SWIFT - Part 4Basic iOS Training with SWIFT - Part 4
Basic iOS Training with SWIFT - Part 4Manoj Ellappan
 
Isomorphic JavaScript: #DevBeat Master Class
Isomorphic JavaScript: #DevBeat Master ClassIsomorphic JavaScript: #DevBeat Master Class
Isomorphic JavaScript: #DevBeat Master ClassSpike Brehm
 

Semelhante a From Back to Front: Rails To React Family (20)

Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]
 
GDSC NITS Presents Kickstart into ReactJS
GDSC NITS Presents Kickstart into ReactJSGDSC NITS Presents Kickstart into ReactJS
GDSC NITS Presents Kickstart into ReactJS
 
20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native
 
React django
React djangoReact django
React django
 
Comparing Angular and React JS for SPAs
Comparing Angular and React JS for SPAsComparing Angular and React JS for SPAs
Comparing Angular and React JS for SPAs
 
React JS: A Secret Preview
React JS: A Secret PreviewReact JS: A Secret Preview
React JS: A Secret Preview
 
React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)
 
React Native custom components
React Native custom componentsReact Native custom components
React Native custom components
 
Architecting single-page front-end apps
Architecting single-page front-end appsArchitecting single-page front-end apps
Architecting single-page front-end apps
 
The State of Front-end At CrowdTwist
The State of Front-end At CrowdTwistThe State of Front-end At CrowdTwist
The State of Front-end At CrowdTwist
 
OttawaJS - React
OttawaJS - ReactOttawaJS - React
OttawaJS - React
 
Introduction to React for Frontend Developers
Introduction to React for Frontend DevelopersIntroduction to React for Frontend Developers
Introduction to React for Frontend Developers
 
Turku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-componentsTurku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-components
 
ASP.NEt MVC and Angular What a couple
ASP.NEt MVC and Angular What a coupleASP.NEt MVC and Angular What a couple
ASP.NEt MVC and Angular What a couple
 
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applications
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontend
 
Angular kickstart slideshare
Angular kickstart   slideshareAngular kickstart   slideshare
Angular kickstart slideshare
 
Basic iOS Training with SWIFT - Part 4
Basic iOS Training with SWIFT - Part 4Basic iOS Training with SWIFT - Part 4
Basic iOS Training with SWIFT - Part 4
 
AngularJS Workshop
AngularJS WorkshopAngularJS Workshop
AngularJS Workshop
 
Isomorphic JavaScript: #DevBeat Master Class
Isomorphic JavaScript: #DevBeat Master ClassIsomorphic JavaScript: #DevBeat Master Class
Isomorphic JavaScript: #DevBeat Master Class
 

Último

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
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
 
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
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
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
 
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
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
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
 
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
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
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
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 

Último (20)

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
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
 
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
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
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
 
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 ...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
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
 
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-...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
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
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 

From Back to Front: Rails To React Family