Faustjs / Headless WPReactWordPress

React NativeからWP REST APIの情報を取得してみる [side iOS]

どうも、車輪の再開発してつらい目にあってた変態です。 WordPressサイトを『PHPなし、React + […]

広告ここから
広告ここまで

どうも、車輪の再開発してつらい目にあってた変態です。

WordPressサイトを『PHPなし、React + WP REST API だけで組む』という謎の縛りプレイでやってみた、ある変態の記録。(※勉強にはなる)

Posted by Webディレクターズマニュアル on 2016年3月5日

フロントエンドカンファレンス関西で「WP REST API使ってアプリ作るといいよ」とか適当なこと言っちゃった手前、React Nativeに手を出してみました。

React Nativeをインストールする

[bash]
$ npm install -g react-native-cli
[/bash]
これだけだったりするので、結構拍子抜けです。

あ、nodeとかXcodeは事前に入れておいてくださいね。

プロジェクトのセットアップ

[bash]
$ react-native init reactWpApp
This will walk you through creating a new React Native project in /Users/hokamoto/develop/reacts/native/reactWpApp
Installing react-native package from npm…

Setting up new React Native app in /Users/hokamoto/develop/reacts/native/reactWpApp
To run your app on iOS:
cd /Users/hokamoto/develop/reacts/native/reactWpApp
react-native run-ios
– or –
Open /Users/hokamoto/develop/reacts/native/reactWpApp/ios/reactWpApp.xcodeproj in Xcode
Hit the Run button
To run your app on Android:
Have an Android emulator running (quickest way to get started), or a device connected
cd /Users/hokamoto/develop/reacts/native/reactWpApp
react-native run-android
[/bash]

これでプロジェクト一式が生成されます。

プロジェクトディレクトリ内に入ればすでにエミュレータを起動できる状態になってるので、とりあえず起動させてみましょう。

さっきの実行結果の中に「これ入れるとエミュレータ起動するよ」というガイドがあったので突っ込みます。
[bash]
$ cd reactWpApp
$ react-native run-ios
[/bash]

すると赤い画面が起動します。

スクリーンショット 2016-03-07 23.19.11

どう見ても何か事故ってます。本当にありがとうございました。

・・・まぁ焦らずに表示されてるメッセージを見ると、「npm startを実行しろ」というコメントがあるのでこれを実行します。
[bash]
$ npm start
> reactWpApp@0.0.1 start /Users/hokamoto/develop/reacts/native/reactWpApp
> node node_modules/react-native/local-cli/cli.js start

┌────────────────────────────────────────────────────────────────────────────┐
│ Running packager on port 8081. │
│ │
│ Keep this packager running while developing on any JS projects. Feel │
│ free to close this tab and run your own packager instance if you │
│ prefer. │
│ │
│ https://github.com/facebook/react-native │
│ │
└────────────────────────────────────────────────────────────────────────────┘
[/bash]

こんな感じのメッセージが出たら「command+R」でエミュレータをリロードします。

スクリーンショット 2016-03-07 23.25.54

サンプルメッセージが表示されました。

ここからは「index.ios.js」というファイルを触ります。

[bash]
% cat index.ios.js
/**
* Sample React Native App
* https://github.com/facebook/react-native
*/
‘use strict’;
import React, {
AppRegistry,
Component,
StyleSheet,
Text,
View
} from ‘react-native’;

class reactWpApp extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{‘\n’}
Cmd+D or shake for dev menu
</Text>
</View>
);
}
}

const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: ‘center’,
alignItems: ‘center’,
backgroundColor: ‘#F5FCFF’,
},
welcome: {
fontSize: 20,
textAlign: ‘center’,
margin: 10,
},
instructions: {
textAlign: ‘center’,
color: ‘#333333’,
marginBottom: 5,
},
});
[/bash]

サイト名と説明文を読み込ませる

まずはルートAPIから取得できるサイト名と説明文を表示させます。

stateの初期設定

ReactではgetInitialStateでstateの初期設定を行いますが、React Nativeではconstructorを使います。
stateの定義などを行うだけなので、ここはシンプルです。
[js]
constructor(props) {
super(props);
this.state = {
site: [],
};
}
[/js]

APIへの通信

APIの通信にはfetchを使います。さよならjQuery、また会う日まで。

[js]
fetchData() {
fetch(REQUEST_URL)
.then((response) => response.json())
.then((responseData) => {
this.setState({
site: responseData,
});
})
.done();
}
componentDidMount() {
this.fetchData();
}
[/js]

componentDidMountでfetchDataを呼び出してAPIにアクセスするという流れは、Reactでも使うやり方ですね。

これでstateにAPIからのレスポンスが格納されるので、あとはrenderに値を入れるだけです。

表示させる

[js]
render() {
var site = this.state.site
return (
<View style={styles.container}>
<Text style={styles.welcome}>
{site.name}
</Text>
<Text style={styles.instructions}>
{site.description}
</Text>
</View>
);
}
[/js]

style部分はreact-native initした時に元から入ってるものなので、今は特に気にしなくて大丈夫です。

できた

ここまでやったらエミュレータを「cmd+R」でリロードして動作確認します。
スクリーンショット 2016-03-07 23.58.50

はい。エミュレータにも無事WP REST APIの情報が表示されました。

記事一覧やメディア一覧でないとやった感があまりないですが、初React Nativeということで今回はここまで。

実際に書いたコードの差分はGitHubで見れますので、「運営中のWordPressサイトをモバイルアプリにしたいんや!」という方は見てみると参考になるかもしれません。

get root api from wp-kyoto · hideokamoto/wp-react-native@9bdd909

参考

Tutorial – React Native | A framework for building native apps using React
Network – React Native | A framework for building native apps using React

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts