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
Building a workable Chrome Extension in React+R...
Search
Nikos Kostoulas
May 20, 2016
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Building a workable Chrome Extension in React+Redux
Devit workshop 2016
Nikos Kostoulas
May 20, 2016
Featured
See All Featured
Building an army of robots
kneath
307
47k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
410
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
WENDY [Excerpt]
tessaabrams
14
40k
The Curious Case for Waylosing
cassininazir
1
570
Between Models and Reality
mayunak
4
500
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
270
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
450
A Modern Web Designer's Workflow
chriscoyier
699
190k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Transcript
Building a Workable Chrome Extension in React & Redux Devit
Conference • May 2016
We are... Sokratis Vidros Senior Software Engineer @ Workable sokratisvidros
Nikos Kostoulas Senior Software Engineer @ Workable nkostoulas
Chrome Extensions
Chrome Extensions
Chrome Extensions Building blocks
Background page
Content script
Popup
Options
Background and content script are separate JS runtimes
• Simple one-time requests • Long-lived connections Message passing Background
script Content script
Spoiled™ Chrome Extension https://github.com/Workable/devit2016
1. Select a GoT character name in narratives 2. View
their spoiler on the side Scenario
Demo
Let’s Dev it!
Background page • Fetch spoiler from server • Memoize last
spoiler Responsibilities Content script • Interact with page DOM • Display the spoiler on the side
Background page Flow Content script 1. Select name in text
2. Send it to the background 6.Render the spoiler 5. Pass it to the content script 3. Receive the selected name 4. Fetch spoiler from server
We would also like to... • Render data efficiently •
Achieve content script isolation • Facilitate message passing • Add memory
Can we use React/Redux?
React/Redux View Action Middleware Reducers Store
{ tab, foreground: true, type: ... } Content script Background
script Architecture View Action Middleware Reducers Store Action Middleware Reducers Store { payload: … } { background: true, type: ... }
Toolbelt + Redux Redux notify React Redux thunk Redux Chrome
Gofer
Show us the code!
Step 1: Scaffolding • Add manifest.json • Add the background
Redux Stack • Add the content script React/Redux Stack • Set-up reduxChromeGofer middleware > git checkout step1
Step 2: Content script encapsulation • Leverage React componentization ◦
Root container component ◦ Spoiler presentational component • Enclose root component in a shadow root ◦ Style encapsulation and isolation > git checkout step2
Step 3: Request spoiler Background Script Content Script { background:
true, type: “REQUEST_SPOILER”, name: ... } • Transfer action from content to background • Execute ajax request from the background ◦ No same-origin policy limitations > git checkout step3 GET /spoilers.json?c=eddard Select name
Content Script Background Script Step 4: Receive spoiler dispatch(receiveSpoiler()) {
foreground: true, tab, type: “RECEIVE_SPOILER”, spoiler: ... } • Dispatch receive action upon retrieval • Pass the spoiler to content script > git checkout step4
• Listen to background script state changes • Push background
state to every content script Step 5: Sync state Background Script Content Script Content Script Content Script > git checkout step5
None
✓ Back end engineers ✓ Front end engineers ✓ Machine
learning engineers ✓ Data scientists ✓ DevOps ✓ UI / UX designers We’re constantly looking for: Apply at careers.workable.com