Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
React for Gutenberg, WordPress & Beyond - WordC...
Search
Zac Gordon
October 06, 2018
Technology
270
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React for Gutenberg, WordPress & Beyond - WordCamp Baltimore 2018
Zac Gordon
October 06, 2018
More Decks by Zac Gordon
See All by Zac Gordon
How We Can Make WordPress Better for the JAMstack
zgordon
0
350
Decoupled Days - JAMstack and WordPress for 2020
zgordon
0
200
The State of JavaScript and WordPress in 2020
zgordon
0
980
100 Things to Know About Building, Selling and Supporting Online Courses and Content
zgordon
0
710
Highly Dynamic WordPress Sites with Gatsby and WordPress
zgordon
0
1.1k
How the New Redux Based Data API is Changing Everything in WordPress*
zgordon
0
430
The Data API in WordPress - WCMIA 2019
zgordon
0
1.1k
Building Custom WordPress Blocks with React - WCPHX 2019
zgordon
0
99
WordCamp Seattle 2017 JavaScript Workshop
zgordon
0
1.1k
Other Decks in Technology
See All in Technology
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
420
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
JavaScript 研修 (2026)
recruitengineers
PRO
2
620
修正PRを食べてレビュースキルが賢くなる:Claude Codeによる自己改善サイクル
yuyaumetsu
6
1.6k
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
240
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.4k
ラジオの科学
frievea
0
340
LanceDB入門
mocobeta
8
590
Bits AI を制するものは Datadog を制す / The player that controls Bits AI, controls Datadog
kaminashi
0
130
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
17
7.6k
まちスペース®とデジタルツインと「まちづくり」
hiro_ogi
0
130
My broken English still works: speaking at global OSS events
naruoga
0
110
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Being A Developer After 40
akosma
91
590k
WENDY [Excerpt]
tessaabrams
11
39k
Evolving SEO for Evolving Search Engines
ryanjones
0
260
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
490
Designing Experiences People Love
moore
143
24k
Accessibility Awareness
sabderemane
1
180
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
210
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
340
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
240
The Spectacular Lies of Maps
axbom
PRO
1
920
Transcript
javascriptforwp.com/bmore @zgordon React for Gutenberg, WordPress & Beyond w Zac
Gordon
javascriptforwp.com/bmore @zgordon Hi! I’m Zac zacgordon.com
javascriptforwp.com/bmore @zgordon How & Why React is Included w WordPress
javascriptforwp.com/bmore @zgordon A bit of history..
javascriptforwp.com/bmore @zgordon Gutenberg is React Under the Hood
javascriptforwp.com/bmore @zgordon Built Decoupled Wired to WordPress
@zgordon javascriptforwp.com/bmore gutenberg-standalone.surge.sh
@zgordon javascriptforwp.com/bmore drupalgutenberg.org
javascriptforwp.com/bmore @zgordon Gutenberg Editor is a Modern React App
@zgordon javascriptforwp.com/bmore npmjs.com/~WordPress
@zgordon javascriptforwp.com/bmore
javascriptforwp.com/bmore @zgordon Better Standards for WordPress JavaScript
@zgordon javascriptforwp.com/bmore github.com/WordPress-Coding-Standards/eslint-plugin-wordpress
javascriptforwp.com/bmore @zgordon Gutenberg Editor is a Modern React App
javascriptforwp.com/bmore @zgordon React in WordPress
javascriptforwp.com/bmore @zgordon The Great WordPress React Abstraction
@zgordon // Enqueue JS - React Dependency? wp_enqueue_script( 'myplugin-js', plugins_url(
null, __FILE__ ) . '/js/plugin.js', [ 'jquery' ] );
@zgordon // Enqueue JS - React Dependency? wp_enqueue_script( 'myplugin-js', plugins_url(
null, __FILE__ ) . '/js/plugin.js', [ 'react' ] );
@zgordon javascriptforwp.com/bmore In WordPress React == wp.element
@zgordon javascriptforwp.com/bmore github.com/WordPress/gutenberg/tree/master/packages/element
@zgordon javascriptforwp.com/bmore The Great WordPress React Abstraction
@zgordon // Normal React const el = React.createElement('h1', null, 'Welcome!');
// WordPress React const el = wp.element.createElement('h1', null, 'Welcome!');
@zgordon // Normal ReactDOM ReactDOM.render( el, document.getElementById( 'root' ) );
// WordPress ReactDOM wp.element.render( el, document.getElementById( ‘root' ) );
@zgordon javascriptforwp.com/bmore wp.element is Available in the DOM window object*
window.wp.element
@zgordon javascriptforwp.com/bmore gutenberg.local
@zgordon // WordPress React - Normal const el = wp.element.createElement('h1',
null, 'Welcome!'); // WordPress React - Destructured const { createElement } = wp.element; const el = createElement('h1', null, 'Welcome!');
javascriptforwp.com/bmore @zgordon To Use React Outside of Gutenberg
@zgordon // Enqueue JS - React Dependency? wp_enqueue_script( 'myplugin-js', plugins_url(
null, __FILE__ ) . '/js/plugin.js', [ 'wp-element' ] );
@zgordon javascriptforwp.com/bmore gutenberg.local
javascriptforwp.com/bmore @zgordon We Also Have JSX In WordPress
@zgordon <PanelBody> <TextControl label={ __( 'Text Field', 'domain' ) }
value={ textControl } onChange={ textControl =>" setAttributes( { textControl } ) } /> </PanelBody> <PanelBody> <TextareaControl label={ __( 'Text Area Field', 'domain' ) } value={ textareaControl } onChange={ textareaControl =>" setAttributes( { textareaControl } ) } /> </PanelBody>
@zgordon javascriptforwp.com/bmore You will need Babel to use JSX..
@zgordon javascriptforwp.com/bmore npmjs.com/package/@wordpress/babel-preset-default
@zgordon javascriptforwp.com/bmore npmjs.com/package/@wordpress/babel-plugin-import-jsx-pragma
@zgordon <PanelBody> <TextControl label={ __( 'Text Field', 'domain' ) }
value={ textControl } onChange={ textControl =>" setAttributes( { textControl } ) } /> <TextareaControl label={ __( 'Text Area Field', 'domain' ) } value={ textareaControl } onChange={ textareaControl =>" setAttributes( { textareaControl } ) } /> </PanelBody>
javascriptforwp.com/bmore @zgordon A React Component Library For WordPress!
@zgordon javascriptforwp.com/bmore wp.components
@zgordon const { Autocomplete, Button, CheckboxControl, ColorPalette, DropZone, FormToggle, Panel,
Popover, Spinner, TextControl, TextareaControl, Tooltip, } = wp.components; const CustomTooltip = () =>" ( <Tooltip text="More Info"> <Button isDefault> Hover for Tooltip </Button> </Tooltip> );
javascriptforwp.com/bmore @zgordon Redux in WordPress
@zgordon javascriptforwp.com/bmore github.com/WordPress/gutenberg/tree/master/packages/data#comparison-with-redux
@zgordon javascriptforwp.com/bmore Ability to Create Our Own Data Stores Using
WP Redux
@zgordon javascriptforwp.com/bmore github.com/WordPress/gutenberg/tree/master/packages/core-data
@zgordon javascriptforwp.com/bmore Use Data API Instead Of Your Own WP
REST API Calls *
@zgordon const { withSelect, withDispatch, } = wp.data;
@zgordon const { withSelect } = wp.data; function MyAuthorsListBase( {
authors } ) { return ( <ul> { authors.map( ( author ) =>" ( <li key={ author.id }>{ author.name }</li> ) ) } </ul> ); } const MyAuthorsList = withSelect( ( select ) =>" ( { authors: select( 'core' ).getAuthors(), } ) )( MyAuthorsListBase );
@zgordon const { withSelect } = wp.data; function MyPostsListBase( {
posts } ) { return ( <ul> { posts.map( ( post ) =>" ( <li key={ post.id }>{ post.title.rendered }</li> ) ) } </ul> ); } const MyPostList = withSelect( ( select ) =>" ( { posts: select( 'core' ).getEntityRecords( 'postType', 'post', { per_page: 5 } ) } ) )( MyPostsListBase );
@zgordon edit: withSelect( select =>" { return { posts: select(
'core' ).getEntityRecords( 'postType', 'post', { per_page: 5 } ) }; } )( ( { posts } ) =>" { return ( <ul> { posts.map( post =>" { return <li>{ post.title.rendered }</li>; }) } </ul> ); } )
@zgordon javascriptforwp.com/bmore npmjs.com/package/@wordpress/api-fetch
javascriptforwp.com/bmore @zgordon React in WP Immediate Future vs. Next Few
Years
javascriptforwp.com/bmore @zgordon Gutenberg “Block” Editor
javascriptforwp.com/bmore @zgordon Gutenberg “Block” Editor, Widgets, Customizer, Themes, Plugins, Decoupled
javascriptforwp.com/bmore @zgordon Do I Need to Learn All of This?
javascriptforwp.com/bmore @zgordon 20% OFF Gutenberg Course javascriptforwp.com/bmore Q&A