ݺߣ

ݺߣShare a Scribd company logo
WC
BA
17
Elio Rivero
Plugins con React y la
REST API
@eliorivero
Plugins para WordPress
con React y la REST API
En un entorno basado en Yarn, Webpack, y Babel.
$ whoami
const elioRivero = {
work:
Automattic: {
team: jetpack,
position: 'Code Wrangler'
},
},
blog: 'elio.blog',
twitter: '@eliorivero'
};
LEARN JAVASCRIPT, DEEPLY
Matt Mullenweg, 2015
2017APREND? REACT, IAAA
GUAUGUAU GUAU
GUAAAAA
GUAUGUAU GUAU
GUAAAAA
GUAUGUAU GUAU
GUAAAAA
 Plugins con React y la REST API (Elio Rivero, WCBA 2017)
 Plugins con React y la REST API (Elio Rivero, WCBA 2017)
CALYPSO
wordpress.com - github.com/Automattic/wp-calypso
JETPACK
jetpack.com - github.com/automattic/jetpack
GET.BLOG
get.blog - github.com/Automattic/delphin
?QU? ES REACT?
 Plugins con React y la REST API (Elio Rivero, WCBA 2017)
Librera
paraconstruir
interfacesdeusuario
Independiente de los datos
Basada en componentes
JSX
facebook.github.io/react
Ejemplos
github.com/eliorivero/miniact
PLUGINS CON REACT
React
Interface
github.com/eliorivero/miniact
WordPress
Plugin API
REST API
PLUGINS CON REACT
React
Interface
github.com/eliorivero/miniact
WordPress
Plugin API
REST API
PLUGINS CON REACT
React
Interface
fetch()
github.com/eliorivero/miniact
WORDPRESS
$ mkdir miniact && cd miniact
$ touch miniact.php
<?php
/**
* Plugin Name: Miniact
*/
add_action( 'wp_footer', function() {
echo '<div id="miniact"></div>';
} );
add_action( 'wp_head', function() {
wp_enqueue_style( 'app', plugins_url( '/build/style.css',
__FILE__ ) );
wp_enqueue_script( 'app', plugins_url( '/build/main.js',
__FILE__ ), array(), false, true );
} );
YARN
Manejador de paquetes y dependencias
YARN
$ yarn init
{
"name": "miniact",
"version": "1.0.0",
"description": "Lista posts de WP con REST API",
"repository": "https://github.com/eliorivero/miniact",
"author": "Elio Rivero",
"license": "GPL-2.0+",
"scripts": {
"build": "NODE_ENV=production webpack",
"watch": "webpack --watch"
}
}
yarnpkg.com/en/docs/install
WEBPACK
Empaquetador de mdulos
WEBPACK
$ yarn add webpack -dev
$ touch webpack.config.js
module.exports = {
entry: './client/index.js',
output: {
path: __dirname + '/build',
filename: 'main.js'
}
};
webpack.js.org
JAVASCRIPT
$ mkdir client && touch client/index.js
console.log( 'Miniact listo! );
$ yarn build
BABEL
Transformador de ES2015 y React
BABEL
$ yarn add babel-core babel-loader babel-preset-es2015 babel-
preset-stage-0 --dev
stage 0 incluye do: let x = do { 12 + 8 };
$ touch .babelrc
{
"presets": [
"es2015",
"react",
"stage-0"
]
}
babeljs.io
WEBPACK
module.exports = {
entry: './client/index.js',
output: {
path: __dirname + '/build',
filename: 'main.js'
},
module: {
loaders: [{
test: /.jsx?$/,
exclude: /node_modules/,
loader: 'babel-loader'
}]
},
resolve: {
extensions: ['*', '.js', '.jsx']
},
};
webpack.js.org
JAVASCRIPT
const max = 100;
const texto = do {
if ( max > 99 ) {
'funcionando';
} else {
'no funciona';
}
};
console.log( 'Miniact ' + texto );
$ yarn build
REACT
Librera JavaScript para UI
REACT
$ yarn add babel-preset-react react react-dom --dev
import React from 'react';
import ReactDOM from 'react-dom';
class DaleReact extends React.Component {
render() {
return <div>{ this.props.app } listo en React!</div>;
}
}
ReactDOM.render(
<DaleReact app="Miniact" />,
document.getElementById( 'miniact' )
);
facebook.github.io/react
REACT
$ yarn build
facebook.github.io/react
?Enorme!
?Sin estilo!
ESTILOS CON SASS
Y compresin de SASS y JS
WEBPACK
$ yarn add extract-text-webpack-plugin style-loader css-
loader dev
loaders: [
 // sigue estando el de Babel y se agrega
{
test: /.scss$/,
loader: ExtractTextPlugin.extract( {
fallback: 'style-loader',
use : {
loader : 'css-loader',
options: { minimize: true } // minifica CSS
}
} )
}
]
webpack.js.org
WEBPACK
$ yarn add extract-text-webpack-plugin style-loader css-
loader dev
devtool: 'production' !== NODE_ENV ? '#source-map' : false,
plugins: [
new webpack.DefinePlugin( {
'process.env.NODE_ENV': JSON.stringify( NODE_ENV )
} ),
new ExtractTextPlugin( 'style.css' )
]
if ( 'production' === NODE_ENV ) {
webpackConfig.plugins.push( new
webpack.optimize.UglifyJsPlugin() ); // minifica JS
}
webpack.js.org
SCSS Y CSS
$ cd client && mkdir sass && touch sass/style.scss
#miniact {
text-align: center;
font-family: sans-serif;
}
En index.js importamos los estilos
import './sass/style.scss';
sass-lang.com
REACT
$ yarn build
facebook.github.io/react
Y ahora ?la WP REST API!
WP REST API
fetch ( 'https://elio.blog/wp-json/wp/v2/posts?per_page=5' )
developer.wordpress.org/rest-api
WP REST API
<?php
/**
* Plugin Name: Miniact
*/
add_action( 'wp_footer', function() {
echo '<div id="miniact"></div>';
} );
add_action( 'wp_head', function() {
wp_enqueue_script( 'app', plugins_url( '/build/main.js',
__FILE__ ), array(), false, true );
wp_enqueue_style( 'app', plugins_url( '/build/style.css',
__FILE__ ) );
wp_localize_script( 'app', 'Miniact', [
'wpRestApi' => esc_url_raw( rest_url() )
]
);
} );
developer.wordpress.org/rest-api
REACT
class DaleReact extends React.Component {
constructor() {
super();
this.state = { items: [] };
}
componentWillMount() {
fetch( `${Miniact.wpRestApi}wp/v2/posts?per_page=5` )
.then( response => response.json() )
.then( items => this.setState( { items } ) );
}
render() {
return <ul>{
this.state.items.map(
item => <li key={ `post-${item.id}` }>{
item.title.rendered
}</li> )
}</ul>;
}
}
WORDPRESS
<?php
/**
* Plugin Name: Miniact
*/
add_action( 'widgets_init', function () {
register_widget( 'Miniact' );
} );
class Miniact extends WP_Widget {
function __construct() {
parent::__construct( 'miniact', 'Miniact' );
}
function widget() {
wp_enqueue_script( 'app', plugins_url( '/build/main.js',
__FILE__ ), array(), false, true );
wp_enqueue_style( 'app', plugins_url( '/build/
style.css', __FILE__ ) );
wp_localize_script( 'app', 'Miniact', [ 'wpRestApi' =>
esc_url_raw( rest_url() ) ] );
echo '<div id="miniact"></div>';
}
}
$ yarn build
?Gracias!
?Preguntas?

More Related Content

More from wpargentina (20)

Mailn Knoblovits: Lo que marca la diferenciaMailn Knoblovits: Lo que marca la diferencia
Mailn Knoblovits: Lo que marca la diferencia
wpargentina
?
Andrs Villarreal: Depresin, Ansiedad y Otros DemoniosAndrs Villarreal: Depresin, Ansiedad y Otros Demonios
Andrs Villarreal: Depresin, Ansiedad y Otros Demonios
wpargentina
?
Lucas Maglicic: Estadsticas de visita y/o Google Analytics con WordPressLucas Maglicic: Estadsticas de visita y/o Google Analytics con WordPress
Lucas Maglicic: Estadsticas de visita y/o Google Analytics con WordPress
wpargentina
?
Otto Wald: Cmo preguntar (y lograr que te respondan) en un foroOtto Wald: Cmo preguntar (y lograr que te respondan) en un foro
Otto Wald: Cmo preguntar (y lograr que te respondan) en un foro
wpargentina
?
Ivn Brice?o: Herramientas de SEO On-Page para WordPressIvn Brice?o: Herramientas de SEO On-Page para WordPress
Ivn Brice?o: Herramientas de SEO On-Page para WordPress
wpargentina
?
Javier Schvindlerman: Creando un plan de contenidos anual en 6 minutosJavier Schvindlerman: Creando un plan de contenidos anual en 6 minutos
Javier Schvindlerman: Creando un plan de contenidos anual en 6 minutos
wpargentina
?
Spencer Cloud: C?mo Crear un Custom Post TypeSpencer Cloud: C?mo Crear un Custom Post Type
Spencer Cloud: C?mo Crear un Custom Post Type
wpargentina
?
Ximena Vinitzca: ?Cmo generar una API key de Google Maps?Ximena Vinitzca: ?Cmo generar una API key de Google Maps?
Ximena Vinitzca: ?Cmo generar una API key de Google Maps?
wpargentina
?
WordPress WPO: Consejos y Herramientas (Federico ?lvarez - Meetup Bs. As. Oct...WordPress WPO: Consejos y Herramientas (Federico ?lvarez - Meetup Bs. As. Oct...
WordPress WPO: Consejos y Herramientas (Federico ?lvarez - Meetup Bs. As. Oct...
wpargentina
?
Co?mo converti? mi trabajo freelance en un negocio (Mercedes Bugarin - Meetup...Co?mo converti? mi trabajo freelance en un negocio (Mercedes Bugarin - Meetup...
Co?mo converti? mi trabajo freelance en un negocio (Mercedes Bugarin - Meetup...
wpargentina
?
 Trabajo a distancia: retos y oportunidades (Karen Arnold, WCBA 2017) Trabajo a distancia: retos y oportunidades (Karen Arnold, WCBA 2017)
Trabajo a distancia: retos y oportunidades (Karen Arnold, WCBA 2017)
wpargentina
?
 Introduccin a herramientas de Roots (Jos Debuchy, WCBA 2017) Introduccin a herramientas de Roots (Jos Debuchy, WCBA 2017)
Introduccin a herramientas de Roots (Jos Debuchy, WCBA 2017)
wpargentina
?
 El soporte soporta tu negocio: caso de estudio de WPML (Otto Wald, WCBA 2017) El soporte soporta tu negocio: caso de estudio de WPML (Otto Wald, WCBA 2017)
El soporte soporta tu negocio: caso de estudio de WPML (Otto Wald, WCBA 2017)
wpargentina
?
 7 claves para romperla con tus contenidos digitales (Pablo Croci, WCBA 2017) 7 claves para romperla con tus contenidos digitales (Pablo Croci, WCBA 2017)
7 claves para romperla con tus contenidos digitales (Pablo Croci, WCBA 2017)
wpargentina
?
 Multisites: creando una red de sitios con WordPress (Pablo Capello, WCBA 2017) Multisites: creando una red de sitios con WordPress (Pablo Capello, WCBA 2017)
Multisites: creando una red de sitios con WordPress (Pablo Capello, WCBA 2017)
wpargentina
?
 Protegiendo tu presencia web con WordPress (Mike Schroder, WCBA 2017) Protegiendo tu presencia web con WordPress (Mike Schroder, WCBA 2017)
Protegiendo tu presencia web con WordPress (Mike Schroder, WCBA 2017)
wpargentina
?
 WordPress: una opcin (no siempre) consciente (Ricardo Aiello, WCBA 2017) WordPress: una opcin (no siempre) consciente (Ricardo Aiello, WCBA 2017)
WordPress: una opcin (no siempre) consciente (Ricardo Aiello, WCBA 2017)
wpargentina
?
 WordPress en el mercado editorial: dos casos de xito (Miguel Lederkremer, W... WordPress en el mercado editorial: dos casos de xito (Miguel Lederkremer, W...
WordPress en el mercado editorial: dos casos de xito (Miguel Lederkremer, W...
wpargentina
?
 Definiciones en desarrollo web: cmo trabajar sobre WordPress (Andrs Villar... Definiciones en desarrollo web: cmo trabajar sobre WordPress (Andrs Villar...
Definiciones en desarrollo web: cmo trabajar sobre WordPress (Andrs Villar...
wpargentina
?
Pensando como Google: tips SEO para generar trfico orgnico (Esteban Cervi,...
 Pensando como Google: tips SEO para generar trfico orgnico (Esteban Cervi,... Pensando como Google: tips SEO para generar trfico orgnico (Esteban Cervi,...
Pensando como Google: tips SEO para generar trfico orgnico (Esteban Cervi,...
wpargentina
?
Mailn Knoblovits: Lo que marca la diferenciaMailn Knoblovits: Lo que marca la diferencia
Mailn Knoblovits: Lo que marca la diferencia
wpargentina
?
Andrs Villarreal: Depresin, Ansiedad y Otros DemoniosAndrs Villarreal: Depresin, Ansiedad y Otros Demonios
Andrs Villarreal: Depresin, Ansiedad y Otros Demonios
wpargentina
?
Lucas Maglicic: Estadsticas de visita y/o Google Analytics con WordPressLucas Maglicic: Estadsticas de visita y/o Google Analytics con WordPress
Lucas Maglicic: Estadsticas de visita y/o Google Analytics con WordPress
wpargentina
?
Otto Wald: Cmo preguntar (y lograr que te respondan) en un foroOtto Wald: Cmo preguntar (y lograr que te respondan) en un foro
Otto Wald: Cmo preguntar (y lograr que te respondan) en un foro
wpargentina
?
Ivn Brice?o: Herramientas de SEO On-Page para WordPressIvn Brice?o: Herramientas de SEO On-Page para WordPress
Ivn Brice?o: Herramientas de SEO On-Page para WordPress
wpargentina
?
Javier Schvindlerman: Creando un plan de contenidos anual en 6 minutosJavier Schvindlerman: Creando un plan de contenidos anual en 6 minutos
Javier Schvindlerman: Creando un plan de contenidos anual en 6 minutos
wpargentina
?
Spencer Cloud: C?mo Crear un Custom Post TypeSpencer Cloud: C?mo Crear un Custom Post Type
Spencer Cloud: C?mo Crear un Custom Post Type
wpargentina
?
Ximena Vinitzca: ?Cmo generar una API key de Google Maps?Ximena Vinitzca: ?Cmo generar una API key de Google Maps?
Ximena Vinitzca: ?Cmo generar una API key de Google Maps?
wpargentina
?
WordPress WPO: Consejos y Herramientas (Federico ?lvarez - Meetup Bs. As. Oct...WordPress WPO: Consejos y Herramientas (Federico ?lvarez - Meetup Bs. As. Oct...
WordPress WPO: Consejos y Herramientas (Federico ?lvarez - Meetup Bs. As. Oct...
wpargentina
?
Co?mo converti? mi trabajo freelance en un negocio (Mercedes Bugarin - Meetup...Co?mo converti? mi trabajo freelance en un negocio (Mercedes Bugarin - Meetup...
Co?mo converti? mi trabajo freelance en un negocio (Mercedes Bugarin - Meetup...
wpargentina
?
 Trabajo a distancia: retos y oportunidades (Karen Arnold, WCBA 2017) Trabajo a distancia: retos y oportunidades (Karen Arnold, WCBA 2017)
Trabajo a distancia: retos y oportunidades (Karen Arnold, WCBA 2017)
wpargentina
?
 Introduccin a herramientas de Roots (Jos Debuchy, WCBA 2017) Introduccin a herramientas de Roots (Jos Debuchy, WCBA 2017)
Introduccin a herramientas de Roots (Jos Debuchy, WCBA 2017)
wpargentina
?
 El soporte soporta tu negocio: caso de estudio de WPML (Otto Wald, WCBA 2017) El soporte soporta tu negocio: caso de estudio de WPML (Otto Wald, WCBA 2017)
El soporte soporta tu negocio: caso de estudio de WPML (Otto Wald, WCBA 2017)
wpargentina
?
 7 claves para romperla con tus contenidos digitales (Pablo Croci, WCBA 2017) 7 claves para romperla con tus contenidos digitales (Pablo Croci, WCBA 2017)
7 claves para romperla con tus contenidos digitales (Pablo Croci, WCBA 2017)
wpargentina
?
 Multisites: creando una red de sitios con WordPress (Pablo Capello, WCBA 2017) Multisites: creando una red de sitios con WordPress (Pablo Capello, WCBA 2017)
Multisites: creando una red de sitios con WordPress (Pablo Capello, WCBA 2017)
wpargentina
?
 Protegiendo tu presencia web con WordPress (Mike Schroder, WCBA 2017) Protegiendo tu presencia web con WordPress (Mike Schroder, WCBA 2017)
Protegiendo tu presencia web con WordPress (Mike Schroder, WCBA 2017)
wpargentina
?
 WordPress: una opcin (no siempre) consciente (Ricardo Aiello, WCBA 2017) WordPress: una opcin (no siempre) consciente (Ricardo Aiello, WCBA 2017)
WordPress: una opcin (no siempre) consciente (Ricardo Aiello, WCBA 2017)
wpargentina
?
 WordPress en el mercado editorial: dos casos de xito (Miguel Lederkremer, W... WordPress en el mercado editorial: dos casos de xito (Miguel Lederkremer, W...
WordPress en el mercado editorial: dos casos de xito (Miguel Lederkremer, W...
wpargentina
?
 Definiciones en desarrollo web: cmo trabajar sobre WordPress (Andrs Villar... Definiciones en desarrollo web: cmo trabajar sobre WordPress (Andrs Villar...
Definiciones en desarrollo web: cmo trabajar sobre WordPress (Andrs Villar...
wpargentina
?
Pensando como Google: tips SEO para generar trfico orgnico (Esteban Cervi,...
 Pensando como Google: tips SEO para generar trfico orgnico (Esteban Cervi,... Pensando como Google: tips SEO para generar trfico orgnico (Esteban Cervi,...
Pensando como Google: tips SEO para generar trfico orgnico (Esteban Cervi,...
wpargentina
?

Plugins con React y la REST API (Elio Rivero, WCBA 2017)