Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JS@PayPal - Specialization with Dynamic React F...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Bruno Sanches
September 23, 2016
Programming
110
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JS@PayPal - Specialization with Dynamic React Forms
Bruno Sanches
September 23, 2016
Other Decks in Programming
See All in Programming
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2.1k
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
180
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
220
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1.1k
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
APNsからLive Activityを開始する話
yumnumm
0
170
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
0
1.4k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
Domain-Driven Transformation
hschwentner
2
2.3k
Featured
See All Featured
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
270
sira's awesome portfolio website redesign presentation
elsirapls
0
460
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
The Curious Case for Waylosing
cassininazir
1
570
Faster Mobile Websites
deanohume
310
32k
Crafting Experiences
bethany
1
380
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
740
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
Prompt Engineering for Job Search
mfonobong
0
520
Transcript
Specialization with dynamic React forms
@brunopsanches Bruno Sanches
Scaling merchant onboarding Lessons and updates Usability tests Current status
Scaling merchant onboarding Lessons and updates Usability tests Current status
page1.dust email.dust email.js email.css name.dust name.js name.css address.dust address.js address.css
page1.js page1.css
Flow
Default flow Team 1 Group flow 1 Flow 1.1 Flow
1.2 Team 2 Group flow 2 Flow 2.1 Flow 2.2 Team 3 Flow 3 Team 4 Flow 4
Scaling merchant onboarding Lessons and updates Usability tests Current status
Rewrite
Rewrite Client && Server side
Rewrite Client && Server side F0 && Named Hooks
Rewrite Client && Server side F0 && Named Hooks React
forms && Specialization
React forms
Minimize client side code Flexibility++ Built for open source
None
None
None
None
None
None
None
None
Okay, that’s a lot of
None
"email": { "component": "TextInput", "validations": [ "required", "emailCheck" ], "attributes":
{ "title": "email.title", "placeholder": "email.placeholder", "name": "email" }, "wrapperAttributes": { "className": "col-md-12" } }
"email": { "component": "TextInput", "validations": [ "required", "emailCheck" ], "attributes":
{ "title": "email.title", "placeholder": "email.placeholder", "name": "email" }, "wrapperAttributes": { "className": "col-md-12" } }
"email": { "component": "TextInput", "validations": [ "required", "emailCheck" ], "attributes":
{ "title": "email.title", "placeholder": "email.placeholder", "name": "email" }, "wrapperAttributes": { "className": "col-md-12" } }
"email": { "component": "TextInput", "validations": [ "required", "emailCheck" ], "attributes":
{ "title": "email.title", "placeholder": "email.placeholder", "name": "email" }, "wrapperAttributes": { "className": "col-md-12" } }
"email": { "component": "TextInput", "validations": [ "required", "emailCheck" ], "attributes":
{ "title": "email.title", "placeholder": "email.placeholder", "name": "email" }, "wrapperAttributes": { "className": "col-md-12" } }
None
None
Rewrite Client && Server side F0 && Named Hooks React
forms && Specialization
Specialization On the server side Eliminate if (country === 'US')
statements
if (country === 'US') { }
if (country === 'US') { if (product === 'product1') {
} }
if (country === 'US') { if (product === 'product1') {
} else if (product === 'product2') { } }
if (country === 'US') { if (product === 'product1') {
} else if (product === 'product2') { } } else if (group === 'EU') { }
if (country === 'US') { if (product === 'product1') {
} else if (product === 'product2') { } } else if (group === 'EU') { if (country === 'GB') { } }
if (country === 'US') { if (product === 'product1') {
} else if (product === 'product2') { } } else if (group === 'EU') { if (country === 'GB') { if (product === 'product1') { } } }
if (country === 'US') { if (product === 'product1') {
} else if (product === 'product2') { } } else if (group === 'EU') { if (country === 'GB') { if (product === 'product1') { if (experiment === 'exp1') { } } } }
None
None
Named Hooks to the rescue Isolates business logic
Named Hooks to the rescue Isolates business logic Open source
module https://github.com/brunops/named-hooks
Demo
1. Load base form 2. Resolve abstractions 3. Call hooks
4. Render
[ 'hookName', 'hookName_Group', 'hookName_Prod', 'hookName_Country', 'hookName_Country_Prod', 'hookName_Exp', 'hookName_Country_Exp', 'hookName_Country_Prod_Exp' ]
[ 'preRenderForm', 'preRenderForm_Group', 'preRenderForm_Prod', 'preRenderForm_Country', 'preRenderForm_Country_Prod', 'preRenderForm_Exp', 'preRenderForm_Country_Exp', 'preRenderForm_Country_Prod_Exp' ]
[ 'preRenderForm', 'preRenderForm_EU', 'preRenderForm_prod', 'preRenderForm_GB', 'preRenderForm_GB_prod', 'preRenderForm_exp', 'preRenderForm_GB_exp', 'preRenderForm_GB_prod_exp' ]
Scaling merchant onboarding Lessons and updates Usability tests Current status
Usability tests - Objective Tested with developers
Usability tests - Objective Tested with developers Configuration driven forms
Usability tests - Objective Tested with developers Configuration driven forms
Documentation discovery
Usability tests - Setup Script
Usability tests - Setup Script 1. Create a form with
text fields 2. Add a dropdown 3. Configure validations 4. Abstract fields 5. Create new page
Usability tests - Setup Script Six developers
Usability tests - Setup Script Six developers 30 minutes each
:(
Scaling merchant onboarding Lessons and updates Usability tests Current status
Current status 4 teams currently working with F0 Working towards
open sourcing https://github.paypal.com/f0/f0/issues
@brunopsanches Thank you