SlideShare uma empresa Scribd logo
1 de 49
RELAY
SEAMLESS SYNCING FOR REACT
A LITTLE ABOUT BROOKE
SHAMELESS SELF PROMOTION
• Full stack developer at MetaLab and Robot Overlord
• Come see me for stickers and buttons after the talk 😉
• Organizes a few meetups
• Leaving the country in February, so giving a few talks before then
• Have been using Relay “professionally” since October 2015
• ~6 weeks after the initial technical preview was open-sourced
• Maintain awesome-relay, but honestly there’s not a ton written about Relay yet (repo will grow when there is more)
ONCE UPON A TIME…
VALUE PROPOSITION
• GraphQL + Relay version
• Took roughly a day
• Built a GraphQL type and tested it
• “Can we have a RESTful version for the old API?”
• Marty + REST version
• Took the most of the remainder of the week
• Had to build a custom route, controller, presenter, and serializer…
• …and then write tests for everything above
REACT + GRAPHQL + HELPERS = RELAY
WHAT WE’RE GOING TO COVER
• Why another front-end framework?
• A brief React refresher
• GraphQL
• Relay
• Closing thoughts
• Q&A
ANOTHER
FRAMEWORK?
THINGS WORK, SO WHY BOTHER
LEARNING ANOTHER FRAMEWORK?
ANOTHER
FRAMEWORK?
DEVELOPER HAPPINESS IS IMPORTANT
BECAUSE FUN!
• It can’t be overstated as an important factor in long-term project success
• It’s fun to learn new things, be on the leading edge, &c
• It’s fun to contribute back to young project, or even open an Issue on the repo
• Removing boilerplate helps us get more done faster, which makes us feel good!
INDIVIDUAL AND INDUSTRY PROGRESS ARE IMPORTANT
BECAUSE PROGRESS!
• Otherwise our jobs would still involve writing FORTRAN on punch cards
• Open progress as a collective profession gets more eyes than internal solutions
EXPERIMENTING WITH NEW WAYS OF DOING THINGS IS IMPORTANT
BECAUSE NEW IDEAS!
• It might not end up being The One True Way, but it still a progression towards The
Next Big Thing
DIFFERENT FRAMEWORKS HAVE DIFFERENT STRENGTHS & GOALS
BECAUSE DIFFERENT USE CASES!
RELAY ISN’T GOING TO DISAPPEAR
BECAUSE FACEBOOK!
• Relay is Facebook backed
• Not disappearing any time soon
• Tied to the future of other tech, like React Native
THE PROBLEM
EFFICIENTLY SYNCING DATA IS HARD
THE PROBLEM
• Generally, we need a way to read from and write to a server
• Projects start simple: a single RESTful endpoint can describe what’s on the page
• But eventually…
• Pages start to require data from multiple resources
• Different pages need different attributes from the same resource
EXISTING SOLUTIONS
WRITE A CUSTOM ENDPOINT FOR EACH USE CASE
EXISTING SOLUTIONS
• Write a custom API endpoint for each use case
• No over- or under-fetching (if you’re willing to put in the time)
• Doesn’t scale: time consuming; brittle; confusing
THE CANONICALLY RESTFUL WAY
EXISTING SOLUTIONS
• Write general RESTful endpoints for each resource
• Can use multiple queries to load data for several resources
• Often get less data than you need (under-fetching)
• Therefore can need multiple requests
• Often get more data than you need (over-fetching)
• Requests are larger than they need to be (inefficient)
PRE-FETCH EVERYTHING THAT THE USER MIGHT WANT
`
• Prefetch all of the data that the user might want on initial page load
• Inefficient (serious over-fetching) & poor performance
EXISTING SOLUTIONS
WHAT IF THE CLIENT CONTROLLED THE RESPONSE SHAPE?
THERE MUST BE A BETTER WAY
• Wouldn’t it be nice if we could…
• ask the server for specific information, ad hoc
• compose queries
• nest queries to mirror the UI’s nesting
• Facebook has a pretty popular website, and make frequent changes
• Updating a RESTful API would not keep up
• Explored a few solutions; settled on their GraphQL
• Netflix and Cognitect have come up with similar solutions
• Falcor
• The Om Next data resolver + Datomic
REACT
A QUICK REFRESHER
BEFORE WE GO ON
REACT
PHILOSOPHY
VIRTUAL DOM
JSX
COMPONENTS
I’M GOING TO MOVE SOMEWHAT QUICKLY, OTHERWISE
STOP ME IF SOMETHING IS UNCLEAR
MORE THAN “THE V IN MVC”
PHILOSOPHY
• A functional approach
• Limit & control state
• Prefer keeping your data unchanged (immutable)
• Isolate any changing (mutable) data
• Components are functions that take props and return a chunk of Virtual DOM
• Declarative (“what”) > imperative (“how”)
• Data flow
• Of course, DRY
JS OBJECT UPDATES ARE MUCH FASTER THAN A BROWSER’S RENDERER
VIRTUAL DOM
• Instead of manipulating the DOM directly, we update a JSON representation it
• Can then diff the DOM, and make focused changes
• This makes re-rendering extremely fast
• We only get real DOM changes
when we need then
• Get multiple changes at once
(no flickering in and out)
• HTML & JSX are trees, so parents
“own” their children
WHO PUT HTML IN MY JS?
JSX
• Handy HTML-like syntax that compiles down to pure JS
• Can mix and match with HTML elements (more or less)
• Pass arguments as “props”
• Nested elements are “props.children”
WHO PUT HTML IN MY JS?
JSX
ROLL YOUR OWN HTML TAGS
• Can write custom components for your display logic
• Just assign a name to the JSX (or plain JS) from previous slide
• Take props, and render plain HTML
COMPONENTS
ROLL YOUR OWN HTML TAGS
COMPONENTS
GRAPHQL
IDEOLOGY
DECLARATIVE SYNTAX
TYPES
QUERIES
MUTATIONS
INTROSPECTION
SINCE ALL SCHEMAS ARE TECHNICALLY GRAPHS…
IDEOLOGY
• “REST gives you data per resource, so let’s try something else”
• Being RESTless(?) is developer heresy
• One endpoint to rule them all; usually /grahql
• Request only what you need
• Let the server figure out how
• Want JSON to express relationships between objects, but get duplication
• So, dedup nodes that have multiple connections
• Graphs are strictly more expressive than relational schemas
• Can rewrite any relational structure as a graph
“I WANT SOME DATA THAT LOOKS LIKE THIS“
DECLARATIVE SYNTAX
GETTING CONTRACTS INTO YOUR APPLICATION
TYPES
• User definable “shapes” or “structs”
• Fields be required or optional
• Enforce data consistency
• Catch bugs early
• Keep the database clean
• Doubles as documentation
THE “GET REQUEST” OF GRAPHQL
QUERIES
PASSING ARGUMENTS
QUERIES
Set up like a function
(arguments -> graph fragment)
THE “PUT/POST/DELETE/SIDE-EFFECT” OF GRAPHQL
MUTATIONS
• “Mutations” are how you change (“mutate”) the world outside of the FE app
• Update a field in the database
• Send an email
• Fire the missiles
• Set up like a function (arguments -> graph fragment)
THE “PUT/POST/DELETE/SIDE-EFFECT” OF GRAPHQL
MUTATIONS
ORDER A SIDE OF DOCS WITH YOUR API
INTROSPECTION
• Can construct a regular query to get metadata
• First-class!
• The schema itself
• the whole thing, or just a portion
• Descriptions of fields
• Descriptions and fields on types
• Descriptions and fields on mutations
• Which fields are required
• What the fragments it can return are
• &c.
GRAPHQL LIVE DEMO
RELAY
ARCHITECTURE
CONTAINERS
LOCAL VS REMOTE DATA
PROS & CONS
TOOLS
IT’S PRETTY NEW™
RELAY
• React was publicly released at the end of May, 2013
• Relay’s technical preview made available in mid-August, 2015
• Facebook has been using parts of it internally for a while (~2 years?)
• They have also been using GraphQL with iOS applications for a while, too
FLUX-ISH
ARCHITECTURE
MAGICAL BOXES TO HANDLE YOUR COMPONENT’S DATA NEEDS
CONTAINERS
• Wraps a “plain” component (HOC)
• Fetches data from the server
• Translates GraphQL to JSON
• Composable (KILLER FEATURE)
OSTENTATION FTW!
CONTAINERS
TALKING TO THE OUTSIDE WORLD
MUTATIONS
SEPARATION OF REMOTE AND LOCAL DATA
TRULY LOCAL DATA
• Relay really wants its client and server stores to be consistent
• If some data is not going to be synced to the server, it doesn’t belonging the graph
• Store such data in the React component state
• ex. partially filled form fields, locked buttons, which tab is visible, &c
• One store for Relay’s synced (“remote”) data, and several for purely local data
IT’S LIKE THEY WERE NEVER HERE
EPHEMERAL DATA
• Relay doesn’t really directly handle temporary data
• For example, let’s say the we want a temporary token that will not be persisted
• We have three options:
• Plain REST
• Plain GraphQL
• Fake it with a null node
FAKE IT ‘TILL THEY MAKE IT
THE NULL NODE KLUDGE
• Create an attribute on the User type node that returns null by default (initial query)
• Mutation to create the token
• Input: {userID: “PF8bxC7R51”}
• Output: {user { id: “PF8bxC7R51”, token: “i3g7BrhwHb” }}
• ie: works as normal
• This data probably doesn’t “belong” on the user, but it’s a convenient location
• If you refresh the page, you’ll need to go through the mutation again
PRETTY GREAT, BUT IT’S NOT ALL KITTENS AND RAINBOWS
PROS AND CONS
� Speeds up development
� Keeps things flexible
� Fun to use
� Very active repo
� Smart people working on it
� Feels like the future
� It’s (very) early days
� Documentation “could be better”
� Some unintuitive naming
� Few complete examples
� Bugs are sometimes the framework
� Doesn't handle local data
Q&A

Mais conteúdo relacionado

Mais procurados

Into to GraphQL
Into to GraphQLInto to GraphQL
Into to GraphQLshobot
 
GraphQL Introduction
GraphQL IntroductionGraphQL Introduction
GraphQL IntroductionSerge Huber
 
The Apollo and GraphQL Stack
The Apollo and GraphQL StackThe Apollo and GraphQL Stack
The Apollo and GraphQL StackSashko Stubailo
 
GraphQL: Enabling a new generation of API developer tools
GraphQL: Enabling a new generation of API developer toolsGraphQL: Enabling a new generation of API developer tools
GraphQL: Enabling a new generation of API developer toolsSashko Stubailo
 
Adding GraphQL to your existing architecture
Adding GraphQL to your existing architectureAdding GraphQL to your existing architecture
Adding GraphQL to your existing architectureSashko Stubailo
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQLRodrigo Prates
 
Raphael Amorim - Scrating React Fiber
Raphael Amorim - Scrating React FiberRaphael Amorim - Scrating React Fiber
Raphael Amorim - Scrating React FiberReact Conf Brasil
 
An intro to GraphQL
An intro to GraphQLAn intro to GraphQL
An intro to GraphQLvaluebound
 
RubyConf Taiwan 2016 - Large scale Rails applications
RubyConf Taiwan 2016 - Large scale Rails applicationsRubyConf Taiwan 2016 - Large scale Rails applications
RubyConf Taiwan 2016 - Large scale Rails applicationsFlorian Dutey
 
Why UI Developers Love GraphQL - Sashko Stubailo, Apollo/Meteor
Why UI Developers Love GraphQL - Sashko Stubailo, Apollo/MeteorWhy UI Developers Love GraphQL - Sashko Stubailo, Apollo/Meteor
Why UI Developers Love GraphQL - Sashko Stubailo, Apollo/MeteorJon Wong
 
GraphQL across the stack: How everything fits together
GraphQL across the stack: How everything fits togetherGraphQL across the stack: How everything fits together
GraphQL across the stack: How everything fits togetherSashko Stubailo
 
GraphQL: The Missing Link Between Frontend and Backend Devs
GraphQL: The Missing Link Between Frontend and Backend DevsGraphQL: The Missing Link Between Frontend and Backend Devs
GraphQL: The Missing Link Between Frontend and Backend DevsSashko Stubailo
 
RubyConf China 2015 - Rails off assets pipeline
RubyConf China 2015 - Rails off assets pipelineRubyConf China 2015 - Rails off assets pipeline
RubyConf China 2015 - Rails off assets pipelineFlorian Dutey
 
Performance optimisation with GraphQL
Performance optimisation with GraphQLPerformance optimisation with GraphQL
Performance optimisation with GraphQLyann_s
 
GraphQL in Ruby on Rails - basics
GraphQL in Ruby on Rails - basicsGraphQL in Ruby on Rails - basics
GraphQL in Ruby on Rails - basicsVisuality
 
RxJS - The Basics & The Future
RxJS - The Basics & The FutureRxJS - The Basics & The Future
RxJS - The Basics & The FutureTracy Lee
 
Modular GraphQL with Schema Stitching
Modular GraphQL with Schema StitchingModular GraphQL with Schema Stitching
Modular GraphQL with Schema StitchingSashko Stubailo
 

Mais procurados (20)

GraphQL
GraphQLGraphQL
GraphQL
 
Into to GraphQL
Into to GraphQLInto to GraphQL
Into to GraphQL
 
Elixir absinthe-basics
Elixir absinthe-basicsElixir absinthe-basics
Elixir absinthe-basics
 
GraphQL Introduction
GraphQL IntroductionGraphQL Introduction
GraphQL Introduction
 
The Apollo and GraphQL Stack
The Apollo and GraphQL StackThe Apollo and GraphQL Stack
The Apollo and GraphQL Stack
 
GraphQL: Enabling a new generation of API developer tools
GraphQL: Enabling a new generation of API developer toolsGraphQL: Enabling a new generation of API developer tools
GraphQL: Enabling a new generation of API developer tools
 
Adding GraphQL to your existing architecture
Adding GraphQL to your existing architectureAdding GraphQL to your existing architecture
Adding GraphQL to your existing architecture
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
 
Raphael Amorim - Scrating React Fiber
Raphael Amorim - Scrating React FiberRaphael Amorim - Scrating React Fiber
Raphael Amorim - Scrating React Fiber
 
An intro to GraphQL
An intro to GraphQLAn intro to GraphQL
An intro to GraphQL
 
RubyConf Taiwan 2016 - Large scale Rails applications
RubyConf Taiwan 2016 - Large scale Rails applicationsRubyConf Taiwan 2016 - Large scale Rails applications
RubyConf Taiwan 2016 - Large scale Rails applications
 
Why UI Developers Love GraphQL - Sashko Stubailo, Apollo/Meteor
Why UI Developers Love GraphQL - Sashko Stubailo, Apollo/MeteorWhy UI Developers Love GraphQL - Sashko Stubailo, Apollo/Meteor
Why UI Developers Love GraphQL - Sashko Stubailo, Apollo/Meteor
 
GraphQL across the stack: How everything fits together
GraphQL across the stack: How everything fits togetherGraphQL across the stack: How everything fits together
GraphQL across the stack: How everything fits together
 
GraphQL: The Missing Link Between Frontend and Backend Devs
GraphQL: The Missing Link Between Frontend and Backend DevsGraphQL: The Missing Link Between Frontend and Backend Devs
GraphQL: The Missing Link Between Frontend and Backend Devs
 
RubyConf China 2015 - Rails off assets pipeline
RubyConf China 2015 - Rails off assets pipelineRubyConf China 2015 - Rails off assets pipeline
RubyConf China 2015 - Rails off assets pipeline
 
Performance optimisation with GraphQL
Performance optimisation with GraphQLPerformance optimisation with GraphQL
Performance optimisation with GraphQL
 
GraphQL in Ruby on Rails - basics
GraphQL in Ruby on Rails - basicsGraphQL in Ruby on Rails - basics
GraphQL in Ruby on Rails - basics
 
RxJS - The Basics & The Future
RxJS - The Basics & The FutureRxJS - The Basics & The Future
RxJS - The Basics & The Future
 
Graphql
GraphqlGraphql
Graphql
 
Modular GraphQL with Schema Stitching
Modular GraphQL with Schema StitchingModular GraphQL with Schema Stitching
Modular GraphQL with Schema Stitching
 

Destaque

A (very brief) into to Functional Programming
A (very brief) into to Functional ProgrammingA (very brief) into to Functional Programming
A (very brief) into to Functional ProgrammingBrooklyn Zelenka
 
GraphQL IndyJS April 2016
GraphQL IndyJS April 2016GraphQL IndyJS April 2016
GraphQL IndyJS April 2016Brad Pillow
 
Zensations Drupal 8 GraphQL Presentation 2015
Zensations Drupal 8 GraphQL Presentation 2015Zensations Drupal 8 GraphQL Presentation 2015
Zensations Drupal 8 GraphQL Presentation 2015Zensations GmbH
 
GraphQL Relay Introduction
GraphQL Relay IntroductionGraphQL Relay Introduction
GraphQL Relay IntroductionChen-Tsu Lin
 
Work with V8 memory leaks
Work with V8 memory leaksWork with V8 memory leaks
Work with V8 memory leaksRoman Krivtsov
 
Elixir and Phoenix for Rubyists
Elixir and Phoenix for RubyistsElixir and Phoenix for Rubyists
Elixir and Phoenix for RubyistsBrooklyn Zelenka
 
Introduction to GraphQL at API days
Introduction to GraphQL at API daysIntroduction to GraphQL at API days
Introduction to GraphQL at API daysyann_s
 
React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)
React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)
React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)Pavel Chertorogov
 
Migration microservices to GraphQL
Migration microservices to GraphQLMigration microservices to GraphQL
Migration microservices to GraphQLRoman Krivtsov
 
GraphQL vs REST
GraphQL vs RESTGraphQL vs REST
GraphQL vs RESTGreeceJS
 
GraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQLGraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQLRiza Fahmi
 
London React August - GraphQL at The Financial Times - Viktor Charypar
London React August - GraphQL at The Financial Times - Viktor CharyparLondon React August - GraphQL at The Financial Times - Viktor Charypar
London React August - GraphQL at The Financial Times - Viktor CharyparReact London Community
 
Graphql Intro (Tutorial and Example)
Graphql Intro (Tutorial and Example)Graphql Intro (Tutorial and Example)
Graphql Intro (Tutorial and Example)Rafael Wilber Kerr
 

Destaque (17)

Witchcraft & Quark
Witchcraft & QuarkWitchcraft & Quark
Witchcraft & Quark
 
A (very brief) into to Functional Programming
A (very brief) into to Functional ProgrammingA (very brief) into to Functional Programming
A (very brief) into to Functional Programming
 
Gourmet Service Object
Gourmet Service ObjectGourmet Service Object
Gourmet Service Object
 
GraphQL IndyJS April 2016
GraphQL IndyJS April 2016GraphQL IndyJS April 2016
GraphQL IndyJS April 2016
 
Zensations Drupal 8 GraphQL Presentation 2015
Zensations Drupal 8 GraphQL Presentation 2015Zensations Drupal 8 GraphQL Presentation 2015
Zensations Drupal 8 GraphQL Presentation 2015
 
GraphQL Relay Introduction
GraphQL Relay IntroductionGraphQL Relay Introduction
GraphQL Relay Introduction
 
Work with V8 memory leaks
Work with V8 memory leaksWork with V8 memory leaks
Work with V8 memory leaks
 
Elixir and Phoenix for Rubyists
Elixir and Phoenix for RubyistsElixir and Phoenix for Rubyists
Elixir and Phoenix for Rubyists
 
Introduction to GraphQL at API days
Introduction to GraphQL at API daysIntroduction to GraphQL at API days
Introduction to GraphQL at API days
 
Use the @types, Luke
Use the @types, LukeUse the @types, Luke
Use the @types, Luke
 
React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)
React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)
React, GraphQL и Relay - вполне себе нормальный компонентный подход (nodkz)
 
Migration microservices to GraphQL
Migration microservices to GraphQLMigration microservices to GraphQL
Migration microservices to GraphQL
 
GraphQL vs REST
GraphQL vs RESTGraphQL vs REST
GraphQL vs REST
 
Swift + GraphQL
Swift + GraphQLSwift + GraphQL
Swift + GraphQL
 
GraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQLGraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQL
 
London React August - GraphQL at The Financial Times - Viktor Charypar
London React August - GraphQL at The Financial Times - Viktor CharyparLondon React August - GraphQL at The Financial Times - Viktor Charypar
London React August - GraphQL at The Financial Times - Viktor Charypar
 
Graphql Intro (Tutorial and Example)
Graphql Intro (Tutorial and Example)Graphql Intro (Tutorial and Example)
Graphql Intro (Tutorial and Example)
 

Semelhante a Relay: Seamless Syncing for React (VanJS)

Untangling spring week11
Untangling spring week11Untangling spring week11
Untangling spring week11Derek Jacoby
 
Dapper: the microORM that will change your life
Dapper: the microORM that will change your lifeDapper: the microORM that will change your life
Dapper: the microORM that will change your lifeDavide Mauri
 
PuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - The State of PuppetPuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - The State of PuppetOlinData
 
The State of Puppet
The State of PuppetThe State of Puppet
The State of PuppetPuppet
 
PuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - The State of PuppetPuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - The State of PuppetWalter Heck
 
Data Ingestion Engine
Data Ingestion EngineData Ingestion Engine
Data Ingestion EngineAdam Doyle
 
Denver Salesforce Developer User Group dec 2016 lightning components
Denver Salesforce Developer User Group dec 2016 lightning componentsDenver Salesforce Developer User Group dec 2016 lightning components
Denver Salesforce Developer User Group dec 2016 lightning componentsMike Tetlow
 
Untangling - fall2017 - week6
Untangling - fall2017 - week6Untangling - fall2017 - week6
Untangling - fall2017 - week6Derek Jacoby
 
Single Page Applications: Your Browser is the OS!
Single Page Applications: Your Browser is the OS!Single Page Applications: Your Browser is the OS!
Single Page Applications: Your Browser is the OS!Jeremy Likness
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Derek Jacoby
 
PostgreSQL, your NoSQL database
PostgreSQL, your NoSQL databasePostgreSQL, your NoSQL database
PostgreSQL, your NoSQL databaseReuven Lerner
 
JSR 335 / java 8 - update reference
JSR 335 / java 8 - update referenceJSR 335 / java 8 - update reference
JSR 335 / java 8 - update referencesandeepji_choudhary
 
Lessons PostgreSQL learned from commercial databases, and didn’t
Lessons PostgreSQL learned from commercial databases, and didn’tLessons PostgreSQL learned from commercial databases, and didn’t
Lessons PostgreSQL learned from commercial databases, and didn’tPGConf APAC
 
12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQLKonstantin Gredeskoul
 
The New York Times: Moving to GraphQL
The New York Times: Moving to GraphQLThe New York Times: Moving to GraphQL
The New York Times: Moving to GraphQLScott Taylor
 
Day 9 - PostgreSQL Application Architecture
Day 9 - PostgreSQL Application ArchitectureDay 9 - PostgreSQL Application Architecture
Day 9 - PostgreSQL Application ArchitectureBarry Jones
 

Semelhante a Relay: Seamless Syncing for React (VanJS) (20)

Untangling spring week11
Untangling spring week11Untangling spring week11
Untangling spring week11
 
React.js at Cortex
React.js at CortexReact.js at Cortex
React.js at Cortex
 
Meteor + React
Meteor + ReactMeteor + React
Meteor + React
 
React introduction
React introductionReact introduction
React introduction
 
Dapper: the microORM that will change your life
Dapper: the microORM that will change your lifeDapper: the microORM that will change your life
Dapper: the microORM that will change your life
 
PuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - The State of PuppetPuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - The State of Puppet
 
The State of Puppet
The State of PuppetThe State of Puppet
The State of Puppet
 
PuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - The State of PuppetPuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - The State of Puppet
 
Data Ingestion Engine
Data Ingestion EngineData Ingestion Engine
Data Ingestion Engine
 
Denver Salesforce Developer User Group dec 2016 lightning components
Denver Salesforce Developer User Group dec 2016 lightning componentsDenver Salesforce Developer User Group dec 2016 lightning components
Denver Salesforce Developer User Group dec 2016 lightning components
 
Untangling - fall2017 - week6
Untangling - fall2017 - week6Untangling - fall2017 - week6
Untangling - fall2017 - week6
 
Single Page Applications: Your Browser is the OS!
Single Page Applications: Your Browser is the OS!Single Page Applications: Your Browser is the OS!
Single Page Applications: Your Browser is the OS!
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9
 
PostgreSQL, your NoSQL database
PostgreSQL, your NoSQL databasePostgreSQL, your NoSQL database
PostgreSQL, your NoSQL database
 
JSR 335 / java 8 - update reference
JSR 335 / java 8 - update referenceJSR 335 / java 8 - update reference
JSR 335 / java 8 - update reference
 
Lessons PostgreSQL learned from commercial databases, and didn’t
Lessons PostgreSQL learned from commercial databases, and didn’tLessons PostgreSQL learned from commercial databases, and didn’t
Lessons PostgreSQL learned from commercial databases, and didn’t
 
React Tech Salon
React Tech SalonReact Tech Salon
React Tech Salon
 
12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL
 
The New York Times: Moving to GraphQL
The New York Times: Moving to GraphQLThe New York Times: Moving to GraphQL
The New York Times: Moving to GraphQL
 
Day 9 - PostgreSQL Application Architecture
Day 9 - PostgreSQL Application ArchitectureDay 9 - PostgreSQL Application Architecture
Day 9 - PostgreSQL Application Architecture
 

Último

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
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, 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
 
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.
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
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
 
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
 
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
 
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
 
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
 
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
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
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
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
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
 
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
 
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
 
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
 

Último (20)

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
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
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...
 
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 ...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
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
 
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 ...
 
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...
 
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
 
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-...
 
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
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
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
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
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
 
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
 
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
 
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 ...
 

Relay: Seamless Syncing for React (VanJS)

  • 2. A LITTLE ABOUT BROOKE SHAMELESS SELF PROMOTION • Full stack developer at MetaLab and Robot Overlord • Come see me for stickers and buttons after the talk 😉 • Organizes a few meetups • Leaving the country in February, so giving a few talks before then • Have been using Relay “professionally” since October 2015 • ~6 weeks after the initial technical preview was open-sourced • Maintain awesome-relay, but honestly there’s not a ton written about Relay yet (repo will grow when there is more)
  • 3. ONCE UPON A TIME… VALUE PROPOSITION • GraphQL + Relay version • Took roughly a day • Built a GraphQL type and tested it • “Can we have a RESTful version for the old API?” • Marty + REST version • Took the most of the remainder of the week • Had to build a custom route, controller, presenter, and serializer… • …and then write tests for everything above
  • 4. REACT + GRAPHQL + HELPERS = RELAY WHAT WE’RE GOING TO COVER • Why another front-end framework? • A brief React refresher • GraphQL • Relay • Closing thoughts • Q&A
  • 6. THINGS WORK, SO WHY BOTHER LEARNING ANOTHER FRAMEWORK? ANOTHER FRAMEWORK?
  • 7. DEVELOPER HAPPINESS IS IMPORTANT BECAUSE FUN! • It can’t be overstated as an important factor in long-term project success • It’s fun to learn new things, be on the leading edge, &c • It’s fun to contribute back to young project, or even open an Issue on the repo • Removing boilerplate helps us get more done faster, which makes us feel good!
  • 8. INDIVIDUAL AND INDUSTRY PROGRESS ARE IMPORTANT BECAUSE PROGRESS! • Otherwise our jobs would still involve writing FORTRAN on punch cards • Open progress as a collective profession gets more eyes than internal solutions
  • 9. EXPERIMENTING WITH NEW WAYS OF DOING THINGS IS IMPORTANT BECAUSE NEW IDEAS! • It might not end up being The One True Way, but it still a progression towards The Next Big Thing
  • 10. DIFFERENT FRAMEWORKS HAVE DIFFERENT STRENGTHS & GOALS BECAUSE DIFFERENT USE CASES!
  • 11. RELAY ISN’T GOING TO DISAPPEAR BECAUSE FACEBOOK! • Relay is Facebook backed • Not disappearing any time soon • Tied to the future of other tech, like React Native
  • 13. EFFICIENTLY SYNCING DATA IS HARD THE PROBLEM • Generally, we need a way to read from and write to a server • Projects start simple: a single RESTful endpoint can describe what’s on the page • But eventually… • Pages start to require data from multiple resources • Different pages need different attributes from the same resource
  • 15. WRITE A CUSTOM ENDPOINT FOR EACH USE CASE EXISTING SOLUTIONS • Write a custom API endpoint for each use case • No over- or under-fetching (if you’re willing to put in the time) • Doesn’t scale: time consuming; brittle; confusing
  • 16. THE CANONICALLY RESTFUL WAY EXISTING SOLUTIONS • Write general RESTful endpoints for each resource • Can use multiple queries to load data for several resources • Often get less data than you need (under-fetching) • Therefore can need multiple requests • Often get more data than you need (over-fetching) • Requests are larger than they need to be (inefficient)
  • 17. PRE-FETCH EVERYTHING THAT THE USER MIGHT WANT ` • Prefetch all of the data that the user might want on initial page load • Inefficient (serious over-fetching) & poor performance EXISTING SOLUTIONS
  • 18. WHAT IF THE CLIENT CONTROLLED THE RESPONSE SHAPE? THERE MUST BE A BETTER WAY • Wouldn’t it be nice if we could… • ask the server for specific information, ad hoc • compose queries • nest queries to mirror the UI’s nesting • Facebook has a pretty popular website, and make frequent changes • Updating a RESTful API would not keep up • Explored a few solutions; settled on their GraphQL • Netflix and Cognitect have come up with similar solutions • Falcor • The Om Next data resolver + Datomic
  • 21. I’M GOING TO MOVE SOMEWHAT QUICKLY, OTHERWISE STOP ME IF SOMETHING IS UNCLEAR
  • 22. MORE THAN “THE V IN MVC” PHILOSOPHY • A functional approach • Limit & control state • Prefer keeping your data unchanged (immutable) • Isolate any changing (mutable) data • Components are functions that take props and return a chunk of Virtual DOM • Declarative (“what”) > imperative (“how”) • Data flow • Of course, DRY
  • 23. JS OBJECT UPDATES ARE MUCH FASTER THAN A BROWSER’S RENDERER VIRTUAL DOM • Instead of manipulating the DOM directly, we update a JSON representation it • Can then diff the DOM, and make focused changes • This makes re-rendering extremely fast • We only get real DOM changes when we need then • Get multiple changes at once (no flickering in and out) • HTML & JSX are trees, so parents “own” their children
  • 24. WHO PUT HTML IN MY JS? JSX • Handy HTML-like syntax that compiles down to pure JS • Can mix and match with HTML elements (more or less) • Pass arguments as “props” • Nested elements are “props.children”
  • 25. WHO PUT HTML IN MY JS? JSX
  • 26. ROLL YOUR OWN HTML TAGS • Can write custom components for your display logic • Just assign a name to the JSX (or plain JS) from previous slide • Take props, and render plain HTML COMPONENTS
  • 27. ROLL YOUR OWN HTML TAGS COMPONENTS
  • 29. SINCE ALL SCHEMAS ARE TECHNICALLY GRAPHS… IDEOLOGY • “REST gives you data per resource, so let’s try something else” • Being RESTless(?) is developer heresy • One endpoint to rule them all; usually /grahql • Request only what you need • Let the server figure out how • Want JSON to express relationships between objects, but get duplication • So, dedup nodes that have multiple connections • Graphs are strictly more expressive than relational schemas • Can rewrite any relational structure as a graph
  • 30. “I WANT SOME DATA THAT LOOKS LIKE THIS“ DECLARATIVE SYNTAX
  • 31. GETTING CONTRACTS INTO YOUR APPLICATION TYPES • User definable “shapes” or “structs” • Fields be required or optional • Enforce data consistency • Catch bugs early • Keep the database clean • Doubles as documentation
  • 32. THE “GET REQUEST” OF GRAPHQL QUERIES
  • 33. PASSING ARGUMENTS QUERIES Set up like a function (arguments -> graph fragment)
  • 34. THE “PUT/POST/DELETE/SIDE-EFFECT” OF GRAPHQL MUTATIONS • “Mutations” are how you change (“mutate”) the world outside of the FE app • Update a field in the database • Send an email • Fire the missiles • Set up like a function (arguments -> graph fragment)
  • 36. ORDER A SIDE OF DOCS WITH YOUR API INTROSPECTION • Can construct a regular query to get metadata • First-class! • The schema itself • the whole thing, or just a portion • Descriptions of fields • Descriptions and fields on types • Descriptions and fields on mutations • Which fields are required • What the fragments it can return are • &c.
  • 39. IT’S PRETTY NEW™ RELAY • React was publicly released at the end of May, 2013 • Relay’s technical preview made available in mid-August, 2015 • Facebook has been using parts of it internally for a while (~2 years?) • They have also been using GraphQL with iOS applications for a while, too
  • 41. MAGICAL BOXES TO HANDLE YOUR COMPONENT’S DATA NEEDS CONTAINERS • Wraps a “plain” component (HOC) • Fetches data from the server • Translates GraphQL to JSON • Composable (KILLER FEATURE)
  • 43.
  • 44. TALKING TO THE OUTSIDE WORLD MUTATIONS
  • 45. SEPARATION OF REMOTE AND LOCAL DATA TRULY LOCAL DATA • Relay really wants its client and server stores to be consistent • If some data is not going to be synced to the server, it doesn’t belonging the graph • Store such data in the React component state • ex. partially filled form fields, locked buttons, which tab is visible, &c • One store for Relay’s synced (“remote”) data, and several for purely local data
  • 46. IT’S LIKE THEY WERE NEVER HERE EPHEMERAL DATA • Relay doesn’t really directly handle temporary data • For example, let’s say the we want a temporary token that will not be persisted • We have three options: • Plain REST • Plain GraphQL • Fake it with a null node
  • 47. FAKE IT ‘TILL THEY MAKE IT THE NULL NODE KLUDGE • Create an attribute on the User type node that returns null by default (initial query) • Mutation to create the token • Input: {userID: “PF8bxC7R51”} • Output: {user { id: “PF8bxC7R51”, token: “i3g7BrhwHb” }} • ie: works as normal • This data probably doesn’t “belong” on the user, but it’s a convenient location • If you refresh the page, you’ll need to go through the mutation again
  • 48. PRETTY GREAT, BUT IT’S NOT ALL KITTENS AND RAINBOWS PROS AND CONS � Speeds up development � Keeps things flexible � Fun to use � Very active repo � Smart people working on it � Feels like the future � It’s (very) early days � Documentation “could be better” � Some unintuitive naming � Few complete examples � Bugs are sometimes the framework � Doesn't handle local data
  • 49. Q&A