SlideShare a Scribd company logo
ReactでJSONを受け取って表示する
FUNTERACTIVE OPEN MEETING VOL.11
OPEN MEETING VOL.11
twitter@regret_raym
studying…Chef / Fluentd / CreateJS
ファンタラクティブ株式会社
取締役,デザイナー
写真素材サイト ぱくたそ
テクニカル・ディレクター
塚口 祐司
OPEN MEETING VOL.11
OPEN MEETING VOL.11
React
‣ Facebookが開発したUI構築のためのJavaScript
‣ MVCのView
‣ Virtual DOM
‣ JSXというXMLのようなSyntax
https://facebook.github.io/react/
Hellow World
http://facebook.github.io/react/docs/getting-started.html
OPEN MEETING VOL.11
Starter Kit
./
├── README.md
├── build
│   ├── JSXTransformer.js
│   ├── react-with-addons.js
│   ├── react-with-addons.min.js
│   ├── react.js
│   └── react.min.js
├── src
│   ├── helloworld.js
├── helloworld.html
└── examples
※NEW
OPEN MEETING VOL.11
helloworld.html
<!DOCTYPE html>
<html>
<head>
<script src="build/react.js"></script>
<script src="build/JSXTransformer.js"></script>
<script type="text/jsx" src="src/helloworld.js"></script>
</head>
<body>
<div id="example"></div>
</body>
</html>
コア
変換
script
描画先
LESSっぽい
OPEN MEETING VOL.11
helloworld.js
React.render(
<h1>Hellow, world!</h1>
document.getElementById('example')
);
OPEN MEETING VOL.11
JSX
OPEN MEETING VOL.11
JSX
var Hellow = React.createClass({
render: function() {
return (
<div className="hellow">
<h1>Hello, {this.props.name}</h1>
</div>
);
}
});
React.render(
<Hellow name="world!" />,
document.getElementById('example')
);
‣ 一見HTMLに見えるXML
クなsyntax
‣ JSX→JavaScript
イルすることで実行できる
OPEN MEETING VOL.11
‣ オンラインで変換する
‣ JSXTransformer
‣ オフラインで変換する
‣ react-tools
‣ browserify / webpack
‣ reactify / jsx-loader
JSX
$ npm install -g react-tools
$ jsx --watch src/ build/
Component
OPEN MEETING VOL.11
HellowをComponent
var Hellow = React.createClass({
render: function() {
return (
<div className="hellow">
<h1>Hello, {this.props.name}</h1>
</div>
);
}
});
React.render(
<Hellow name="world!" />,
document.getElementById('example')
);
OPEN MEETING VOL.11
React.createClass
var Hellow = React.createClass({
render: function() {
return (
<div className="hellow">
<h1>Hello, {this.props.name}</h1>
</div>
);
}
});
‣ React.createClassにrender
メソッドをもったオブジェク
トを渡すことでコンポーネン
トが作成できる
OPEN MEETING VOL.11
return
var Hellow = React.createClass({
render: function() {
return (
<div className="hellow">
<h1>Hello, {this.props.name}</h1>
</div>
<div>description</div>
);
}
});
‣ Return
Component
OPEN MEETING VOL.11
Prop
var Hellow = React.createClass({
render: function() {
return (
<div className="hellow">
<h1>Hello, {this.props.name}</h1>
</div>
);
}
});
React.render(
<Hellow name="world!" />,
document.getElementById('example')
);
‣ HTMLのattribute
ロパティ値を設定でき、それ
を参照することができる。
‣ 親→子への一方通行
OPEN MEETING VOL.11
State
var Counter = React.createClass({
getInitialState() {
return {
count: 0
};
},
onClick() {
this.setState({count: this.state.count + 1});
},
render() {
return (
<div>
<div>count:{this.state.count}</div>
<button onClick={this.onClick}>click!</button>
</div>
);
}
});
‣ 動的に値が変化するような場
合はStateを使
‣ this.state.XXXXで参照、
this.setState
JSON
OPEN MEETING VOL.11
メンバーリストを表示する
MemberBox
MemberList
Member
JSON
OPEN MEETING VOL.11
JSON
var data = [
{id: 1, author: "井村圭介"},
{id: 2, author: "塚口祐司"}
];
OPEN MEETING VOL.11
Render
React.render(
<MemberBox data={data} />,
document.getElementById('example')
);
MemberBoxにjson値を設定
OPEN MEETING VOL.11
MemberBox
var MemberBox = React.createClass({
getInitialState: function() {
return({
count: this.props.data
});
},
render: function() {
return (
<div className="memberBox">
<h1>Member</h1>
<p>{this.state.count.length} persons</p>
<MemberList data={this.props.data} />
</div>
);
}
});
MemberListに値を渡す
OPEN MEETING VOL.11
MemberList
var MemberList = React.createClass({
render: function() {
var memberNodes = this.props.data.map(function (member) {
return (
<Member author={member.author}></Member>
);
});
return (
<div className="memberList">
{memberNodes}
</div>
);
}
});
JSON値をMemberComponentに設定
OPEN MEETING VOL.11
MemberBox
var Member = React.createClass({
render: function() {
return (
<div className="member">
<h2 className="memberAuthor">
{this.props.author}
</h2>
</div>
)
}
});
渡された値を表示
OPEN MEETING VOL.11
外部API
OPEN MEETING VOL.11
OPEN MEETING VOL.11
OPEN MEETING VOL.11
Render
React.render(
<MemberBox url="https://www.kimonolabs.com/api/7tthqscc?
apikey=fnR8ogc0OeVcgxjrmb9GUiKxrAN5FcxL" />,
document.getElementById('example')
);
OPEN MEETING VOL.11
MemberBox
var MemberBox = React.createClass({
getInitialState: function() {
return {data: []};
},
~~~~
初期化
OPEN MEETING VOL.11
MemberBox
~~~~
loadAjax: function() {
$.ajax({
url: this.props.url,
dataType: 'jsonp',
success: function(data) {
this.setState({data: data.results.collection1});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
~~~~
OPEN MEETING VOL.11
MemberBox
componentDidMount: function() {
this.loadAjax();
},
ComponentがDOMツリーに追加
された状態で呼ばれるのでDOMに
関わる初期化処理を行いたい時
OPEN MEETING VOL.11
OPEN MEETING VOL.11
ご清聴ありがとうございました

More Related Content

PDF
JURNAL PjBL KELAS KEWIRAUSAHAAN PPG DALJAB.pdf
DOCX
Rpp viii semester 1 kd 2.2 [listening]
PDF
Buku Panduan Jurnal Ilmiah dalam Jaringan (Daring) IPB
DOCX
Rencana pembelajaran kelas rangkap sardiana
DOCX
KKTP sandra.docx
DOCX
Tugas rpp pkr 221 nila
PPTX
SPEC 101+ PRESENTATION (8).pptx
PDF
Pemanfaatan Kalkulator dalam Pembelajaran Matematika
JURNAL PjBL KELAS KEWIRAUSAHAAN PPG DALJAB.pdf
Rpp viii semester 1 kd 2.2 [listening]
Buku Panduan Jurnal Ilmiah dalam Jaringan (Daring) IPB
Rencana pembelajaran kelas rangkap sardiana
KKTP sandra.docx
Tugas rpp pkr 221 nila
SPEC 101+ PRESENTATION (8).pptx
Pemanfaatan Kalkulator dalam Pembelajaran Matematika

What's hot (20)

DOC
Week 5 Reflection Assignment
PPT
Comparison Of Esl And General Education Lesson Plan
PPT
Integrazione di ontologie su un sistema a regole: un caso di studio
PPT
Independent reading
DOCX
Instrumen Rencana Evaluasi.docx
DOC
lATIHAN SOAL. 3.doc
DOCX
Pengamatan pembelajaran lk 4.2
DOCX
RPP BIPA
PPT
Assessment For Learning
DOCX
Cover proposal ptk
DOCX
Rpp Bahasa Inggris SMK kelas X teks Narative
PPTX
Topik 3. Inovasi Pembelajaran Berbasis Teknologi.pptx
PPTX
Power point ptk
PPTX
EKA SUTARMI-REFLEKSI PPL SIKLUS 2.pptx
PDF
2 ms scripts
PDF
Teaching Practice Overview
PPTX
Teori Piaget, Ausubel, dan Brunner
PPTX
Scaffolding strategies to_use_with_your_students
PDF
Pembelajaran Menulis
DOCX
Laporan pkp pada mata pelajaran matematika
Week 5 Reflection Assignment
Comparison Of Esl And General Education Lesson Plan
Integrazione di ontologie su un sistema a regole: un caso di studio
Independent reading
Instrumen Rencana Evaluasi.docx
lATIHAN SOAL. 3.doc
Pengamatan pembelajaran lk 4.2
RPP BIPA
Assessment For Learning
Cover proposal ptk
Rpp Bahasa Inggris SMK kelas X teks Narative
Topik 3. Inovasi Pembelajaran Berbasis Teknologi.pptx
Power point ptk
EKA SUTARMI-REFLEKSI PPL SIKLUS 2.pptx
2 ms scripts
Teaching Practice Overview
Teori Piaget, Ausubel, dan Brunner
Scaffolding strategies to_use_with_your_students
Pembelajaran Menulis
Laporan pkp pada mata pelajaran matematika
Ad

Similar to React入門-JSONを取得して表示する (20)

PDF
React.jsでクライアントサイドなWebアプリ入門
PDF
React entry
PPTX
今からでも遅くない! React事始め
PDF
React introduntion
PDF
React.js + Flux入門 #scripty02
PDF
Reactとbabelで簡易タスク管理ツール作ってみた
PDF
フロントエンド開発入門(React).pdf
PPTX
SYSTEMI勉強会まとめ資料(React基礎まとめ)
PPTX
Mithril - 軽量/高速なMVCフレームワーク
PDF
Intoroduction to React.js
PDF
react勉強会 #4
PPTX
React入門
PDF
React+TypeScriptもいいぞ
PPTX
Reactつかってみた
PPTX
React+redux+saga 03
PDF
Start React with Browserify
PPTX
Web開発初心者がReactをチームに導入して半年経った
PDF
everevo × Open Graph
PDF
React+fluxを導入した話
PPTX
React+redux+saga 01
React.jsでクライアントサイドなWebアプリ入門
React entry
今からでも遅くない! React事始め
React introduntion
React.js + Flux入門 #scripty02
Reactとbabelで簡易タスク管理ツール作ってみた
フロントエンド開発入門(React).pdf
SYSTEMI勉強会まとめ資料(React基礎まとめ)
Mithril - 軽量/高速なMVCフレームワーク
Intoroduction to React.js
react勉強会 #4
React入門
React+TypeScriptもいいぞ
Reactつかってみた
React+redux+saga 03
Start React with Browserify
Web開発初心者がReactをチームに導入して半年経った
everevo × Open Graph
React+fluxを導入した話
React+redux+saga 01
Ad

More from regret raym (18)

PDF
SlackにHubotを設定して対話する
PDF
CreateJSを使ったアニメーション表現の基礎
PDF
1年間で100万PV増やしたコンテンツ運用と最適化|写真素材サイトぱくたそ
PDF
FluentdとGrothForecastをインストールする
PDF
Chefで作る開発環境
PDF
Dockerの導入
PDF
Jenkinsの導入 vol.02 Bitbucketと連携する
PDF
Jenkinsの導入 Vol.01
PDF
MT東京 ぱくたそ/PAKUTASO
PDF
今から始めるPhotoshopによるWeb制作-初期設定編
PDF
Web制作のアレコレ
PDF
Yurufuwa007
PDF
WordPressで投稿記事情報の取得方法
PDF
WordCamp Tokyo2012 handson Portfolio
PDF
WordCamp Tokyo2012 Session
PDF
Movable typeでモバイルギャラリーサイト
PDF
Css拡張言語のコトハジメ
PDF
Wp html5
SlackにHubotを設定して対話する
CreateJSを使ったアニメーション表現の基礎
1年間で100万PV増やしたコンテンツ運用と最適化|写真素材サイトぱくたそ
FluentdとGrothForecastをインストールする
Chefで作る開発環境
Dockerの導入
Jenkinsの導入 vol.02 Bitbucketと連携する
Jenkinsの導入 Vol.01
MT東京 ぱくたそ/PAKUTASO
今から始めるPhotoshopによるWeb制作-初期設定編
Web制作のアレコレ
Yurufuwa007
WordPressで投稿記事情報の取得方法
WordCamp Tokyo2012 handson Portfolio
WordCamp Tokyo2012 Session
Movable typeでモバイルギャラリーサイト
Css拡張言語のコトハジメ
Wp html5

React入門-JSONを取得して表示する