React JS para usuários do WordPress: uma introdução básica

Publicados: 2018-10-19

Por mais de 15 anos, o WordPress tem sido a solução CMS mais popular e completa que permite construir qualquer coisa, desde um portfólio de uma página até uma plataforma de comércio eletrônico completa. WordPress usa PHP para toda a sua infraestrutura de back-end, como atualizações, APIs, auth, camada de banco de dados e a maior parte do front-end. No entanto, como outras estruturas populares, o WordPress também foi forçado a evoluir nos últimos tempos.

Dado o potencial crescente e o poder dos aplicativos JavaScript para web, bem como aplicativos móveis nativos e de desktop, a API WP REST tenta preencher a lacuna entre o legado do núcleo do PHP do WordPress e a ascensão do JavaScript. Eu acredito que este é um grande passo para o WordPress por dois motivos:

  1. Os sites WP existentes podem usar React / Vue ou outra biblioteca de front-end para criar uma melhor experiência de IU.
  2. Por outro lado, os desenvolvedores da Web obtêm um CMS sem cabeça padrão da indústria que pode ser facilmente integrado com a pilha de sua escolha.

Essa é uma situação ganha-ganha para todos. Neste artigo, vamos concentrar nossa energia na construção de um front-end React para o back-end do WordPress. Mas primeiro, vamos dar uma olhada na API REST do WordPress.

Noções básicas da API REST do WordPress

O desenvolvimento da API WP REST começou há alguns anos e foi inicialmente projetado como um plugin de recurso autônomo. WordPress v4.4, codinome 'Clifford', introduziu a infraestrutura real da API REST no núcleo do WordPress. Os endpoints reais apareceram no WordPress v4.7, codinome 'Vaughan'. A API WP permite que você use o WordPress como um CMS sem cabeça que é fácil de usar, estável e compatível com JSON.

JSON

JSON é o formato preferido se você pretende integrar o WordPress com uma pilha de JavaScript. JSON é semelhante ao XML no sentido de que nos dá a capacidade de transferir dados com eficiência usando uma sintaxe muito legível.

JSON é na verdade uma string que compreende uma representação baseada em texto de um objeto JavaScript. Ele armazena dados em um conjunto de pares de valores-chave. Um exemplo simples de JSON de uma postagem WP pode ter a seguinte aparência -

{
id: 1,
"title": {
"rendered": "Hello World"
  },
  "content": {
"rendered": "Welcome to WordPress. This is your first
post. Edit or delete it, then start blogging!"
  }
}

Uma resposta JSON completa usando a API WP REST geralmente inclui informações adicionais sobre a postagem, como metadados. Você tem tudo o que precisa para criar um tema de front-end ou um plug-in para seu aplicativo.

Os pontos finais

Os endpoints do WordPress são muito acessíveis ao público. Se você estiver executando a versão mais recente do WordPress, basta anexar / wp-json / wp / v2 ao final da URL. Por exemplo, você pode acessar os pontos de extremidade básicos em 127.0.0.1/wp-json/wp/v2 se tiver configurado uma instância do WordPress em seu host local. Se você quiser embelezar a saída, pode usar uma extensão do visualizador JSON que faz o JSON parecer bonito em seu navegador.

Os dados que estão sendo exibidos na tela são essencialmente o conteúdo, bem como as metainformações no formato JSON. O que você fez aqui foi definir uma rota e pediu ao seu navegador para buscar os dados para você.

O que queremos dizer com rota? Uma rota é um URL mapeado para um método específico. O núcleo do WordPress lê a rota e entende que cada '/' representa um caminho ou parâmetro específico que precisa ser seguido.

Por exemplo, um endpoint pode ser '/ wp-json / wp / v2 / posts / 1' , onde você está solicitando uma postagem com um id equivalente a 1. APIs do WordPress são úteis porque são muito extensas. Isso se traduz na capacidade de pegar qualquer dado do seu site e transformá-lo em um terminal. Quase todas as funcionalidades básicas do WordPress são suportadas e todos os recursos futuros também serão suportados. Aqui está uma lista de APIs do WordPress com suporte no momento em que este tutorial foi escrito:

Recurso Rota Base
Postagens / wp / v2 / posts
Postar revisões / wp / v2 / revisions
Categorias / wp / v2 / categorias
Tag / wp / v2 / tags
Páginas / wp / v2 / pages
Comentários / wp / v2 / comentários
Taxonomias / wp / v2 / taxonomias
meios de comunicação / wp / v2 / media
Comercial / wp / v2 / users
Tipos de postagem / wp / v2 / types
Post status / wp / v2 / statuses
Definições / wp / v2 / settings

Os desenvolvedores de temas, bem como os desenvolvedores de plug-ins, podem criar terminais personalizados para seus aplicativos. Se você deseja verificar todos os terminais diferentes disponíveis, você pode baixar um aplicativo como o Postman. Isso fornecerá a você uma GUI feita especialmente para explorar APIs. Além disso, você pode fazer chamadas de API diretamente para aplicativos de terceiros sem ter que depender de plug-ins.

Vamos dar um exemplo. Carregar arquivos e manter várias versões deles é um requisito integral para qualquer aplicativo da web moderno. Isso é particularmente verdadeiro no caso de arquivos de mídia. No WordPress, há uma abundância de plug-ins disponíveis que podem fazer isso por você; no entanto, pode ser necessário fazer chamadas para o servidor WordPress para usá-los.

Com a API WP, a lógica de gerenciamento de mídia pode ser abstraída do WordPress. Você pode fazer todas as chamadas de API de terceiros diretamente do front-end, o que é ótimo em termos de separação de interesses. Você pode usar uma biblioteca como a Cloudinary para manipular as imagens e outros arquivos de mídia instantaneamente e, em seguida, enviá-los para a nuvem. Depois de carregado, o URL da imagem pode ser armazenado no backend do WP. As opções são infinitas e você pode combinar as peças da maneira que achar melhor.

Vamos agora ver como conectar o back-end do WordPress ao React.

Primeiros passos com React

React é uma biblioteca de front-end declarativa para construir interfaces de usuário e aplicativos interativos na web. Com o React, você pode compor pedaços menores independentes de código reutilizável, conhecidos como componentes. Vamos criar nosso primeiro componente criando um projeto React.

A maneira mais popular de criar um projeto React é executando create-react-app. CRA oferece um ambiente confortável para aprender React e é a melhor maneira de começar a construir um novo aplicativo de página única se você for um iniciante. Ele configura seu ambiente de desenvolvimento para que você possa usar os recursos JavaScript mais recentes, como ES6 e webpack. Além disso, o create-react-app fornece uma boa experiência de desenvolvedor e otimiza seu aplicativo para produção.

começando com reagir

Você precisará ter Node> = 8.xe npm> = 5.2 em sua máquina. Para criar um projeto, execute os seguintes comandos:


npx create-react-app wp-react-demo

O comando acima cria um modelo padrão para nosso aplicativo react, que chamamos de wp-react-demo .


cd wp-react-demo
npm start

Se tudo correr bem, ele deve ser capaz de servir o aplicativo recém-criado em um servidor de desenvolvimento em http: // localhost: 3000 /.

Se você está curioso para ver a estrutura de diretórios gerada por create-react-app, esta é a aparência:

.
├── README.md
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ └── manifest.json
├── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ └── registerServiceWorker.js
└── yarn.lock

O diretório público contém todos os ativos necessários para iniciar o aplicativo. O diretório src compreende todos os arquivos JavaScript nos quais estaremos trabalhando e você gastará muito do seu tempo lá.

Quando você visita localhost: 3000, o arquivo index.html é carregado. Se você abrir o arquivo public / index.html, não há muito lá. Mas você encontrará esta linha em algum lugar no meio:

<div id="root"></div>

Esse é o ponto de partida onde o React renderiza a árvore de componentes na raiz do aplicativo.

O que isso significa? Vá para o diretório src e abra index.js .

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(<App />, document.getElementById('root'));

O React tenta encontrar um elemento com id "root" no documento e então injeta o componente na raiz. Na realidade, o componente App é renderizado e é daí que vem o logotipo giratório do React. Você pode verificar isso abrindo o arquivo src / App.js.

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';

class App extends Component {
 render() {
   return (
     <div className="App">
       <header className="App-header">
         <img src={logo} className="App-logo" alt="logo" />
         <h1 className="App-title">Welcome to React</h1>
       </header>
       <p className="App-intro">
         To get started, edit <code>src/App.js</code> and save to reload.
       </p>
     </div>
   );
 }
}

export default App;

Esta é basicamente a aparência de um componente. Cada componente renderiza uma parte de sua IU. Você pode compor um componente dentro de outro e é assim que obtém uma estrutura de árvore de componentes como esta:

árvore de componentes de reação

Se você está se perguntando por que podemos usar HTML dentro de render (), essa é a mágica do JSX. JSX é uma extensão de sintaxe para JavaScript e permite usar HTML simples em um arquivo JavaScript. Você pode ler mais sobre isso nos documentos oficiais.

Vou excluir todo o conteúdo HTML e, em seguida, substituí-lo por um

tag como esta:

<div>
<h2> WordPress Blog </h2>
</div>

Componentes e estado de reação

Os componentes são os blocos de construção do React. Cada componente pode ter

  1. uma entrada (ou múltiplas entradas) comumente conhecida como adereços.
  2. um estado que é local para o componente
  3. métodos que renderizam algo (por exemplo: render ()) ou manipulam alguma lógica de negócios

Vamos construir um componente que irá recuperar todas as postagens disponíveis e exibi-las de volta para o usuário. Para fazer isso, primeiro escreveremos um construtor para a classe e inicializaremos o estado no construtor:

constructor (props){
   super(props);

   this.state = {
     title: {},
     date: "",
     content: {}
   };
 }

O estado é um objeto JSON. Declaramos um título, uma data e propriedades de conteúdo dentro do construtor. O título e o conteúdo são objetos, enquanto a data é uma matriz.

Buscando os dados e atualizando o estado

Agora, quando o componente é montado, ele precisa buscar os dados das postagens da API e armazená-los no estado. Os dados das postagens estão disponíveis no seguinte URL:


http://localhost/wp-json/wp/v2/posts/

Então, onde colocamos essa lógica? O construtor pode parecer uma boa escolha porque ele é chamado quando o componente é criado, mas não é a melhor escolha. Em vez disso, usaremos algo conhecido como método de ciclo de vida. O método de ciclo de vida componentDidMount () é chamado depois que o componente é montado.

componentDidMount() {
       return fetch(`http://wordpress.com/wp-json/wp/v2/posts/`)
       .then((response) => response.json())
       .then((responseJson) => {
        // Update state here         
       })
       .catch((error) => {
         console.error(error);
       });         
 }

Estamos usando fetch, que é o padrão de fato em JavaScript para fazer chamadas de API. O parâmetro para fetch () é a URL que queremos buscar. Fetch retorna uma promessa que podemos avaliar por uma cadeia de .then () s. O primeiro bloco converte a resposta para o formato json para que possamos colocá-la no estado.

const { title, date, content } =  responseJson;

        this.setState({ title, date, content });

Então, o que acontece aqui? Primeiro, extraímos os campos de título, data e conteúdo do objeto responseJson. A sintaxe estranha que você vê aqui é conhecida como sintaxe de atribuição de desestruturação. Como você já deve saber, a API WP retorna muitas informações que não solicitamos. A sintaxe de atribuição de desestruturação torna possível descompactar valores do objeto em variáveis ​​distintas.

Em seguida, usamos this.setState () para atualizar o estado do componente. O método setState () aceita um objeto como parâmetro que será o estado atualizado.

Rendering Our WordPress post

O método render retorna JSX que discutimos anteriormente. Ao contrário do HTML puro, você pode realmente incorporar expressões em JSX. Por exemplo, se precisar renderizar o título da postagem buscada e nada mais, você pode fazer o seguinte:

render() {
   return (
     <div>
     {this.state.title.rendered}
     </div>
   );
 }
}

Tente!

Da mesma forma, você pode renderizar a data incorporando {this.state.date} . No entanto, o conteúdo armazenado no estado compreende o HTML real. Como o HTML é retornado do servidor, é seguro assumir que não há perigo em renderizá-lo. Portanto, para renderizar o conteúdo, você precisará atribuir o atributo dangerouslySetInnerHTML da seguinte maneira:

<div
    className= "content"
    dangerouslySetInnerHTML={{ __html: this.state.content.rendered }}>
</div>

Aqui está o método render () em ação.

render() {
   return (
     <div>
       <div>
             <div className="row">
               <div className="leftcolumn">
                 <div className="card">
                   <div className= "title">
                     <h1>{this.state.title.rendered}</h1>
                     <p> {this.state.date} </p>
                   </div>
                
                   <div
                     className= "content"
                     dangerouslySetInnerHTML={{ __html: this.state.content.rendered }} />
                 </div>
               </div>
             </div>
           </div>
     </div>
   );
 }
}

Eu adicionei algumas tags e classes extras para estilização. Você pode escrever todos os seus estilos em um arquivo no diretório src e importá-lo para o seu App.js. Você pode encontrar os estilos para este projeto em src / App.css . Não se esqueça de adicionar uma instrução de importação, caso contrário, os estilos não funcionarão.

import './App.css';

É isso. Você criou um front-end básico para o back-end da API do WordPress usando React. Esta é a aparência da postagem padrão do Hello World em nosso aplicativo:

basic-wordpress-react-app-final-result

Resumo

Ufa! É muito terreno coberto em um único dia. Começamos com a API Rest do WordPress e depois nos familiarizamos com os endpoints da API. Em seguida, começamos a construir um aplicativo React do zero que basicamente exibe uma postagem do WordPress.

Usar o React com o WordPress é o mesmo que usar o React com qualquer outra API de back-end. Com o WordPress, é mais fácil encontrar dados e você sabe exatamente onde procurar. Se você acabou de começar a explorar o React, recomendo os documentos do React como um bom lugar para começar. Se você tiver alguma dúvida, fique à vontade para perguntar nos comentários.