Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ReactとFluxのこと
Search
geta6
April 26, 2015
Programming
65k
166
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ReactとFluxのこと
http://inside.pixiv.net/entry/2015/04/27/170944
geta6
April 26, 2015
More Decks by geta6
See All by geta6
mastodonのnodeのはなし
geta6
0
3.2k
pixiv SketchのSSRの話
geta6
10
4.5k
What is CoffeeScript
geta6
8
950
Other Decks in Programming
See All in Programming
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
150
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
2
300
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
200
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
130
Webの地図
yosuke_furukawa
PRO
6
4.8k
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
320
AWSに止められる覚悟してますか?
morizo_1984
2
440
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
570
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
290
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
320
新卒PdEのリアル
ryu1013
1
520
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.1k
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
8.3k
sira's awesome portfolio website redesign presentation
elsirapls
0
420
Chasing Engaging Ingredients in Design
codingconduct
0
340
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
450
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
A Tale of Four Properties
chriscoyier
163
24k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Between Models and Reality
mayunak
4
470
Utilizing Notion as your number one productivity tool
mfonobong
4
600
Transcript
React Flux
HFUB SFBDUͱqVYʹ͍ͭͯษڧͯ͠Δ
HFUB ࡶʹ·ͱΊͯΈΔ
None
3FBDU w GBDFCPPL͕࡞ͬͨ+BWB4DSJQUͷϏϡʔ༻ϥΠϒϥϦ w ϑϨʔϜϫʔΫͰͳ͍ʢॏཁʣ w ΞʔΩςΫνϟΛ੍͢ΔͷͰͳ͍ɺϏϡʔ༻ͷ ίϯϙʔωϯτͱͯ͠୯ಠͰར༻͢Δ͜ͱ͕Ͱ͖Δ w .PEFMͱ$PMMFDUJPO#BDLCPOFɺ7JFX͚ͩ3FBDUɺ
ͱ͍͏ετʔϦʔ͋ΓಘΔ w αʔόͰΫϥΠΞϯτͰར༻Մೳ
#FGPSF3FBDU
TUPSZ { items: ['foo'] } <ul id='items'> <li>foo</li> </ul> {
items: ['foo', 'bar'] } <ul id='items'> <li>foo</li> <li>bar</li> </ul> w Ϟσϧͷߏʹैͬͯ%0.Λग़ྗ͢ΔγʔϯΛߟ͑Δ
K2VFSZ $('#item').append('<li>' + _.last(items) + '</li>'); { items: ['foo'] }
<ul id='items'> <li>foo</li> </ul> { items: ['foo', 'bar'] } <ul id='items'> <li>foo</li> <li>bar</li> </ul>
{ items: ['foo'] } <ul id='items'> <li>foo</li> </ul> { items:
['foo', 'bar'] } <ul id='items'> <li>foo</li> <li>bar</li> </ul> K2VFSZ $('#item').append('<li>' + _.last(items) + '</li>'); HTML͕ೖͬͯདྷΔՄೳੑ͕͋ΔͷͰ XSSϦεΫ͕..
K2VFSZ $('#item').append('<li>' + _.escape(_.last(items)) + '</li>'); { items: ['foo'] }
<ul id='items'> <li>foo</li> </ul> { items: ['foo', '<i>bar</i>'] } <ul id='items'> <li>foo</li> <li><i>bar</i></li> </ul>
{ items: ['foo'] } <ul id='items'> <li>foo</li> </ul> { items:
['foo', '<i>bar</i>'] } <ul id='items'> <li>foo</li> <li><i>bar</i></li> </ul> K2VFSZ $('#item').append('<li>' + _.escape(_.last(items)) + '</li>'); ςϯϓϨʔτ͍ͨ͠ͷͰ ݅Ͱม͑ͯΒ͍͍ͬͯͰ͔͢.. APIมΘΓ·͢..
K2VFSZ var val = _.last(items); if (val.t !== 'tmpl') val.b
= _.escape(val.b); $('#item').append('<li>' + val.b + '</li>'); { items: [{t: 'text', b:'foo'}] } <ul id='items'> <li>foo</li> </ul> { items: [ {t: 'text', b: 'foo'}, {t: 'tmpl', b: '<i>bar</i>'} ] } <ul id='items'> <li>foo</li> <li><i>bar</i></li> </ul>
K2VFSZ var val = _.last(items); if (val.t !== 'tmpl') val.b
= _.escape(val.b); $('#item').append('<li>' + val.b + '</li>'); { items: [{t: 'text', b:'foo'}] } <ul id='items'> <li>foo</li> </ul> { items: [ {t: 'text', b: 'foo'}, {t: 'tmpl', b: '<i>bar</i>'} ] } <ul id='items'> <li>foo</li> <li><i>bar</i></li> </ul> ಛఆ݅ͷ࣌inputͰฤूͰ͖ΔΑ͏ʹ ͯ͠Β͍͍ͨΜͰ͕͍͍͢Ͱ͔͢..
K2VFSZ var val = _.last(items); if (val.t !== 'tmpl') {
val.b = _.escape(val.b); } else if (val.t === 'edit') { val.b = '<input value=' + val.b + '>'; } $('#item').append('<li>' + val.b + '</li>'); { items: [{t: 'text', b:'foo'}] } <ul id='items'> <li>foo</li> </ul> { items: [ {t: 'text', b: 'foo'}, {t: 'edit', b: '<i>bar</i>'} ] } <ul id='items'> <li>foo</li> <li><input value='<i>bar</i>'></li> </ul>
K2VFSZ var val = _.last(items); if (val.t !== 'tmpl') {
val.b = _.escape(val.b); } else if (val.t === 'edit') { val.b = '<input value=' + val.b + '>'; } $('#item').append('<li>' + val.b + '</li>'); { items: [{t: 'text', b:'foo'}] } <ul id='items'> <li>foo</li> </ul> { items: [ {t: 'text', b: 'foo'}, {t: 'edit', b: '<i>bar</i>'} ] } <ul id='items'> <li>foo</li> <li><input value='<i>bar</i>'></li> </ul> ࠷ऴߦ͡Όͳ్ͯ͘தʹ৽σʔλ͕ ૠೖ͞ΕΔͱόάΓ·͢..
K2VFSZ var val = _.last(items); if (val.t !== 'tmpl') {
val.b = _.escape(val.b); } else if (val.t === 'edit') { val.b = '<input value=' + val.b + '>'; } $('#item').append('<li>' + val.b + '</li>'); { items: [{t: 'text', b:'foo'}] } <ul id='items'> <li>foo</li> </ul> { items: [ {t: 'text', b: 'foo'}, {t: 'edit', b: '<i>bar</i>'} ] } <ul id='items'> <li>foo</li> <li><input value='<i>bar</i>'></li> </ul> ࠷ऴߦ͡Όͳ్ͯ͘தʹ৽σʔλ͕ ૠೖ͞ΕΔͱόάΓ·͢.. ͷ༧ײ #7299716
K2VFSZ var val = _.last(items); if (val.t !== 'tmpl') {
val.b = _.escape(val.b); } else if (val.t === 'edit') { val.b = '<input value=' + val.b + '>'; } $('#item').append('<li>' + val.b + '</li>'); { items: [{t: 'text', b:'foo'}] } <ul id='items'> <li>foo</li> </ul> { items: [ {t: 'text', b: 'foo'}, {t: 'edit', b: '<i>bar</i>'} ] } <ul id='items'> <li>foo</li> <li><input value='<i>bar</i>'></li> </ul> ్தʹૠೖͱ͔ϋʔυίʔσΟϯάʹͳΓͦ͏.. ͜ΕҎ্ཁٻ͕૿͑ΔͱରԠͰ͖ͳͦ͏.. Ҿ͖ܧ͍ͩΒෛ࠴ʹͳΓͦ͏.. ϑϨʔϜϫʔΫೖΕΕ͍͍ͱฉ͍ͨͷͰ ͱΓ͋͑ͣBackboneΛೖΕͯΈΔ
#BDLCPOF class RawView extends Backbone.View { constructor() { this.tagName =
'li'; super(); } initialize(options) { _.bindAll(this, 'render', 'remove'); this.listenTo(this.model, 'change', this.render); this.listenTo(this.model, 'destroy', this.remove); } render() { $(this.el).html(_.template('<span><%- b %></span>', this.model.toJSON())); return this; } } class InputView extends RawView { render() { $(this.el).html(_.template('<input val="<%- b %>">', this.model.toJSON())); return this; } } class EscapeView extends RawView { render() { $(this.el).html(_.template('<span><%- _.escape(b) %></span>">', this.model.toJSON())); return this; } } { items: [{t: 'text', b:'foo'}] } <ul id='items'> <li>foo</li> </ul> { items: [ {t: 'text', b: 'foo'}, {t: 'edit', b: '<i>bar</i>'} ] } <ul id='items'> <li><span>foo</span></li> <li><input value='<i>bar</i>'></li> </ul> class CollectionView extends Backbone.View { constructor() { this.el = '#items'; super(); } initialize(options) { _.bindAll(this, 'resetItems', 'appendItem', 'removeItem'); this.listenTo(this.collection, 'reset', this.resetItems); this.listenTo(this.collection, 'add', this.appendItem); this.listenTo(this.collection, 'remove', this.removeItem); } resetItems(collection) { collection.each((model) => this.appendItem(model)); } appendItem(model) { var view; switch (model.get('t')) { case 'text': view = new EscapeView({model}); break; case 'tmpl': view = new RawView({model}); break; case 'edit': view = new InputView({model}); break; } var view = new ModelView({model}); $(this.el).append(view.render().el); } removeItem(model) { model.destroy(); } } var collection = new Backbone.Collection(items); new CollectionView({collection}); http://goo.gl/aiVQks
#BDLCPOF class RawView extends Backbone.View { constructor() { this.tagName =
'li'; super(); } initialize(options) { _.bindAll(this, 'render', 'remove'); this.listenTo(this.model, 'change', this.render); this.listenTo(this.model, 'destroy', this.remove); } render() { $(this.el).html(_.template('<span><%- b %></span>', this.model.toJSON())); return this; } } class InputView extends RawView { render() { $(this.el).html(_.template('<input val="<%- b %>">', this.model.toJSON())); return this; } } class EscapeView extends RawView { render() { $(this.el).html(_.template('<span><%- _.escape(b) %></span>">', this.model.toJSON())); return this; } } { items: [{t: 'text', b:'foo'}] } <ul id='items'> <li>foo</li> </ul> { items: [ {t: 'text', b: 'foo'}, {t: 'edit', b: '<i>bar</i>'} ] } <ul id='items'> <li>foo</li> <li><input value='<i>bar</i>'></li> </ul> class CollectionView extends Backbone.View { constructor() { this.el = '#items'; super(); } initialize(options) { _.bindAll(this, 'resetItems', 'appendItem', 'removeItem'); this.listenTo(this.collection, 'reset', this.resetItems); this.listenTo(this.collection, 'add', this.appendItem); this.listenTo(this.collection, 'remove', this.removeItem); } resetItems(collection) { collection.each((model) => this.appendItem(model)); } appendItem(model) { var view; switch (model.get('t')) { case 'text': view = new EscapeView({model}); break; case 'tmpl': view = new RawView({model}); break; case 'edit': view = new InputView({model}); break; } var view = new ModelView({model}); $(this.el).append(view.render().el); } removeItem(model) { model.destroy(); } } var collection = new Backbone.Collection(items); new CollectionView({collection}); ͳɹ͕ɹ͍ ͜ͷྫͩͱModel୯ಠ͕ͩ Model͕ෳʹͳΔͱ ͞Βʹάονϟάνϟʹͳ͍ͬͯ͘ http://goo.gl/aiVQks
#BDLCPOF class RawView extends Backbone.View { constructor() { this.tagName =
'li'; super(); } initialize(options) { _.bindAll(this, 'render', 'remove'); this.listenTo(this.model, 'change', this.render); this.listenTo(this.model, 'destroy', this.remove); } render() { $(this.el).html(_.template('<span><%- b %></span>', this.model.toJSON())); return this; } } class InputView extends RawView { render() { $(this.el).html(_.template('<input val="<%- b %>">', this.model.toJSON())); return this; } } class EscapeView extends RawView { render() { $(this.el).html(_.template('<span><%- _.escape(b) %></span>">', this.model.toJSON())); return this; } } { items: [{t: 'text', b:'foo'}] } <ul id='items'> <li>foo</li> </ul> { items: [ {t: 'text', b: 'foo'}, {t: 'edit', b: '<i>bar</i>'} ] } <ul id='items'> <li>foo</li> <li><input value='<i>bar</i>'></li> </ul> class CollectionView extends Backbone.View { constructor() { this.el = '#items'; super(); } initialize(options) { _.bindAll(this, 'resetItems', 'appendItem', 'removeItem'); this.listenTo(this.collection, 'reset', this.resetItems); this.listenTo(this.collection, 'add', this.appendItem); this.listenTo(this.collection, 'remove', this.removeItem); } resetItems(collection) { collection.each((model) => this.appendItem(model)); } appendItem(model) { var view; switch (model.get('t')) { case 'text': view = new EscapeView({model}); break; case 'tmpl': view = new RawView({model}); break; case 'edit': view = new InputView({model}); break; } var view = new ModelView({model}); $(this.el).append(view.render().el); } removeItem(model) { model.destroy(); } } var collection = new Backbone.Collection(items); new CollectionView({collection}); ͳɹ͕ɹ͍ ͜ͷྫͩͱModel୯ಠ͕ͩɺ Model͕ෳʹͳͬͨ࣌ ͞Βʹάονϟάνϟʹͳ͍ͬͯ͘
#BDLCPOF class RawView extends Backbone.View { constructor() { this.tagName =
'li'; super(); } initialize(options) { _.bindAll(this, 'render', 'remove'); this.listenTo(this.model, 'change', this.render); this.listenTo(this.model, 'destroy', this.remove); } render() { $(this.el).html(_.template('<span><%- b %></span>', this.model.toJSON())); return this; } } class InputView extends RawView { render() { $(this.el).html(_.template('<input val="<%- b %>">', this.model.toJSON())); return this; } } class EscapeView extends RawView { render() { $(this.el).html(_.template('<span><%- _.escape(b) %></span>">', this.model.toJSON())); return this; } } { items: [{t: 'text', b:'foo'}] } <ul id='items'> <li>foo</li> </ul> { items: [ {t: 'text', b: 'foo'}, {t: 'edit', b: '<i>bar</i>'} ] } <ul id='items'> <li>foo</li> <li><input value='<i>bar</i>'></li> </ul> class CollectionView extends Backbone.View { constructor() { this.el = '#items'; super(); } initialize(options) { _.bindAll(this, 'resetItems', 'appendItem', 'removeItem'); this.listenTo(this.collection, 'reset', this.resetItems); this.listenTo(this.collection, 'add', this.appendItem); this.listenTo(this.collection, 'remove', this.removeItem); } resetItems(collection) { collection.each((model) => this.appendItem(model)); } appendItem(model) { var view; switch (model.get('t')) { case 'text': view = new EscapeView({model}); break; case 'tmpl': view = new RawView({model}); break; case 'edit': view = new InputView({model}); break; } var view = new ModelView({model}); $(this.el).append(view.render().el); } removeItem(model) { model.destroy(); } } var collection = new Backbone.Collection(items); new CollectionView({collection}); ͳɹ͕ɹ͍ ͜ͷྫͩͱModel୯ಠ͕ͩɺ Model͕ෳʹͳͬͨ࣌ ͞Βʹάονϟάνϟʹͳ͍ͬͯ͘ #7299716
FWJM w ͳʹ͕ѱ͍ͷ͔
FWJM w ϨϯμϦϯάίετΛؾʹͯ͠ભҠΛॻ͔ͳ͍ͱ͍͚ͳ ͍ͷ͕ѱ͍ w BQQFOEͱ͔͊͞
FWJM w ຖճ৽͘͠%0.࡞্ͬͯॻ͖͢Είʔυͱ%0.ͷঢ় ଶʹဃ͕ແ͘ͳΔ w Ͱͦ͏͢ΔͱJOQVUͷೖྗςΩετͳͲɺҰ࣌తͳ ঢ়ଶ͕ഁغ͞Εͯ͠·͏ w ྻ͕ͭͱ͔ͳΒ͍͍͚ͲUVNCMSͷμογϡϘʔυ Έͨ͘ݸͱ͔ʹͳΔͱϨϯμϦϯάίετͰٿ
͕Ϡό͍
FWJM w ϦΞϧλΠϜόΠϯσΟϯάʹ͠ΖԿʹ͠Ζɺશ෦Λ· Δͬͱॻ͖͑ΔҎ֎ͷख๏ΛͱΔͳΒɺσʔλͷભҠ ʹਵ͢ΔॲཧΛॻ͔͟ΔΛಘͳ͍ w ࠷ॳͷϨϯμϦϯά͔Βεςοϓ͕ਐΊਐΉ΄Ͳɺίʔ υͱ%0.ͷဃ͕ਐߦ͍ͯ͘͠
FWJM w ਓԿ͔ͷ٘ਜ਼ͳ͠ʹԿಘΔࣄͳͲͰ͖ͳ͍ w KTѱຐͱͷܖͩͬͨ
FWJM w ਓԿ͔ͷ٘ਜ਼ͳ͠ʹԿಘΔࣄͳͲͰ͖ͳ͍ w KTѱຐͱͷܖͩͬͨ
FWJM w ਓԿ͔ͷ٘ਜ਼ͳ͠ʹԿಘΔࣄͳͲͰ͖ͳ͍ w KTѱຐͱͷܖͩͬͨ
3FBDUͷར w ʮຖճ৽͘͠%0.࡞্ͬͯॻ͖͢Είʔυͱ%0.ͷ ঢ়ଶʹဃ͕ແ͘ͳΔʯ w ࡶʹݴ͏ͱɺ͜ΕˢΛݱ࣮తͳ࣮ʹམͱ͠ࠐΜͩͷ ͕3FBDU w ͜ΕΛ࣮ݱ͢ΔͨΊʹ7JSUVBM%0.ͱ͍͏ΈΛͬ ͯͨ
7JSUVBM%0. w ͜Ε·ͰϑϩϯτͰسආ͞Ε͖߽ͯͨతϓϩάϥϛϯάύϥμΠϜͷ ݱ࣮తͳղͷҰ͕ͭ3FBDU w σʔλߏʹରԠ͢Δͷ%0.Λߏங͢Δϝιου͕͋Γɺͦͷ %0.ͱݱࡏͷ%0.ͷEJGGΛऔͬͯࠩߋ৽͢Δ { items: ['foo',
'bar'] } <ul id='items'> <li>foo</li> <li>bar</li> </ul> { items: ['foo', 'baz'] } <ul id='items'> <li>foo</li> <li>baz</li> </ul> EJGG <ul id='items'> <li>foo</li> <li>baz</li> </ul>
7JSUVBM%0. w EJGGΛऔΔͨΊʹੜ͞ΕΔ%0.ͷ͜ͱΛ7JSUVBM%0.ͱ͍͏ɺࣗͰॻ ͘ͷ͜͏͍͏σʔλͳΒ͜͏ͳΔͱ͍͏ϝιουͷΈ w ભҠʹؔ͢ΔॲཧΛॻ͘ඞཁ͕ແ͍ɺৗʹʮ͜͏ͳͬͯ΄͍͠ʯͱ͍͏ %0.Λు͖ग़͠ଓ͚ɺݱࡏͷ%0.ͦͷ%0.ʹ͔ͬͯࣗಈͰભҠ͢Δ { items: ['foo',
'bar'] } <ul id='items'> <li>foo</li> <li>bar</li> </ul> { items: ['foo', 'baz'] } EJGG <ul id='items'> <li>foo</li> <li>baz</li> </ul> 7JSUVBM%0. <ul id='items'> <li>foo</li> <li>baz</li> </ul>
7JSUVBM%0. w BUUSJCVUF͕มΘΕมΘΔͷBUUSJCVUF͚ͩɺCPEZ͕มΘΕมΘΔ ͷCPEZ͚ͩ w 7JFXͰ࣮͠ͳ͚Ε͍͚ͳ͍ͷʮJUFNTΛΠςϨʔτͯ͠MJTUΛ࡞Δ ςϯϓϨʔτʯ͚ͩʹͳΔ { items: ['foo',
'bar'] } <ul id='items'> <li>foo</li> <li>bar</li> </ul> { items: ['foo', 'baz'] } EJGG <ul id='items'> <li>foo</li> <li>baz</li> </ul> <ul id='items'> <li>foo</li> <li>baz</li> </ul> 7JSUVBM%0.
3FBDUͷར w ίϯϙʔωϯτϕʔεͰ%0.ΛΈཱͯΔ͜ͱ͕Ͱ͖Δ w ࡶʹݴ͏ͱػೳΛแͨ͠ಠࣗλά͕࡞ΕΔ w 8FC$PNQPOFOUT͕ࢦ͍ͯͨ͠ੈքΛ࣮ϨϕϧͰ࣮ ݱͰ͖Δ
3FBDUͷར w KTY͏ͱΑΓ࣮ײͰ͖Δ σΟʔφϯτΧࣾͷ͡Όͳ͍΄͏ w KTYίϯύΠϧͨ͠ΒKTʹͳΔͭͰ͢ɺ$PGGFFΈ͍ͨͳΜ ͩͱࢥ͍ͬͯͩ͘͞ var Hello
= React.createClass({ render() { return React.DOM.div(null, `Hello ${this.props.name}`); } }) var Hello = React.createClass({ render() { return <div>Hello {this.props.name}</div>; } })
3FBDU w ྫ͑ɺྻ͕͞ΕͨΒMJTUΛউखʹ࡞Δλάͱ͔ <Iterate items={['foo', 'bar']} /> <ul> <li>foo</li> <li>bar</li>
</ul>
3FBDU w ྫ͑ɺݕࡧ݁ՌΛΠςϨʔτͨ͠Β֤ཁૉΛϨϯμϦϯ άͯ͠ग़ͯ͘͠ΕΔͱ͔ w ͏·͘Γ͚ΕɺΛదʹࢄ͢Δ͜ͱ͕Ͱ͖Δ <section className='results'> {this.state.results.map(item =>
{ return <Result item={item} />; })} </section>
3FBDU w ྫ͑ɺޙ͔Β͜͜ΛJODSFNFOUͨ͘͠ ͳͬͨͱ͢Δ <section className='results'> {this.state.results.map(item => { return
<Result item={item} />; })} </section> #49974740
3FBDU w ͜͏͢Δ͚ͩͰউखʹࠩߋ৽ͯ͘͠ΕΔΠϝʔδ Ͱ͢ ࣮ࡍʹTFUUFSΛ௨͢ w ߋ৽͞ΕΔͷதͷࣈͷΈɺ%0.มߋ͞Εͳ͍ results[1].fav_count +=
1 --- <section className='results'> {this.state.results.map(item => { return <Result item={item} />; })} </section> #49974740
None
qVY w qVY͕Ͳ͏͍͏ΞʔΩςΫνϟ͔ɺͷલʹ
qVY w ʮqVYΛΠϯετʔϧ͢ΕϨʔϧʹΕΔʯ w ʮqVYશʹ৽͍֓͠೦ɺ࠷ߴʯ w ͜Εӕ
qVY w qVYΞʔΩςΫνϟͷ໊લ w ͨͩͷPCTFSWFSύλʔϯ w 3FBDUͱqVYૄ݁߹ɺ3FBDU Λޮతʹ׆༻͢ΔΞʔΩς Ϋνϟͱͯࣔ͠͞Ε͚ͨͩ w
qVYͷ࠷༏Ε͍ͯΔɺ ӈਤͷΑ͏ͳύλʔϯʹqVY ͱ͍͏໊લΛ͚ͭͨॴ
GBGSPUTLJFT w ਓؒݹདྷ͔Βحոͳݱʹ໊લΛ ͚Δ͜ͱͰࣄΛઢҾ͖͠ɺίϛϡχ έʔγϣϯίετΛݮΒͨ͠Γɺ ͷΓ͚ΛߦͬͨΓ͖ͯͨ͠ w ϑΝϑϩπΩʔζʮͦͷʹ͋Δ ͣͷͳ͍ͷ ڕͱ͔
͕߱ͬͯ͘Δʯ ݱͷ͜ͱ w ໊લΛ͚͓͚ͭͯɺ͍͖ͳΓۭ͔Β େྔͷڕ͕߱Γ͍Ͱʮ͋͊ɺ͋Ε Ͷʯͱݴ͑ΔɺਆʹفͬͯੜᩴΛ๋͛ Δ͖͔Ͳ͏͔ఆͰ͖Δɺӈԟࠨԟ ͤͣʹࡁΉɺจݙΛ୧Δ͜ͱ༰қ
qVY w qVYͱ͍͏໊લ͕͋Δ͚ͩͰɺઃܭ͕ͲΕ͚ͩqVY͔ɺ࣮ ͲΕ͚ͩqVY͔Β֎Ε͍ͯΔ͔ɺςετͲ͏ॻ͔Ε ͍ͯΔ͖͔ɺͱ͔Λ؆қʹೝࣝͰ͖ΔΑ͏ʹͳΔ w ϑΝδʔͳਓؒͷͰͪΌΜͱΛೝࣝͰ͖Δɺจ຺ ͷᴥᴪ͕ੜ·Εʹ͍͘ w υΩϡϝϯτաڈͷ࣭ʹͨΓқ͍
w ϨϏϡʔ͍͢͠ɺΞʔΩςΫνϟʹैΘͳ͍1VMM 3FRVFTUΛॠࡴͰ͖Δ
ZBIPPqVYJCMFʹ13ग़ͨ͠ w Θͨ͠ʮ͜ͷϝιουɺଞͩͱฦΓ͋Δͷʹ7JFXͰ ͚ͬͨ࣌ͩฦΓ͕ແ͍ͷ͓͔͘͠ͳ͍ʁʯ w :ࣾʮ7JFXͰͦΕฦ͢ͱqVY͡Όͳ͘ͳΔ͔Βʯ w ॠࡴ͞Εͨ
qVYqPX "DUJPO %JTQBUDIFS 4UPSF 7JFX "DUJPO QBZMPBE "1* 0CKFDU \LFZ
WBM^ 0CKFDU \LFZ WBM^ 4UPSFE0CKFDU <>
qVYqPX "DUJPO %JTQBUDIFS 4UPSF 7JFX "DUJPO QBZMPBE "1* 0CKFDU \LFZ
WBM^ 0CKFDU \LFZ WBM^ 4UPSFE0CKFDU <> #18558660
qVY w σʔλͷϑϩʔৗʹઈରඞͣҰํ w ྫ͑ɺ"DUJPOҎ֎͕)551ϦΫΤετΛൃߦͯࣗ͠ Λߋ৽͢Δͷμϝ Тဂ ʢGBWͱ͔Ͱʣ w Ͳ͏͍ͬͨϑϩʔͰσʔλ͕͖߱ͬͯͯɺͲ͏͍ͬͨ݁Ռ
͕ग़͔ͨɺೝࣝͷΓ͚͕ͱָͯ w ͜ͷߏͷ͍͍ͱ͜ΖPCTFSWFSύλʔϯͳײ͡ͳͷͰద ٓάά͍ͬͯͩ͘͞ɺ͜ͷεϥΠυͰओʹ"DUJPOͱ͔qVY ͰΘΕΔ༻ޠΛઆ໌͠·͢
qVY w "DUJPO͕ελʔτɺ7JFX͕ΰʔϧ w "DUJPOʹΑΔ4UPSFͷߋ৽Λݕ͠ɺ7JFXࣗͷΞο ϓσʔτ͕ߦΘΕΔ
qVYqPX "DUJPO %JTQBUDIFS 4UPSF 7JFX "1* VQEBUF VQEBUF USJHHFS σʔλΛૹ
<&WFOU&NJUUFS> ΞΫηεɾJOQVUͳͲͷ ೖྗΛड͚ͯσʔλΛߏங σʔλΛஷΊΔ <#BDLCPOF$PMMFDUJPO> σʔλΛදݱ <3FBDU> 45"35 (0"- )551"DDFTT "DUJPO QBZMPBE 0CKFDU \LFZ WBM^ 0CKFDU \LFZ WBM^ 4UPSFE0CKFDU <>
qVY w 7JFX"DUJPOΛൃߦ͠ɺϑϩʔΛτϦΨʔͰ͖Δ
qVYqPX "DUJPO %JTQBUDIFS 4UPSF 7JFX BDUJPO "1* 3&45"35 <ϢʔβʔΠϕϯτ> ϘλϯͷΫϦοΫ
ϖʔδͷΦʔτϦϩʔυ "DUJPO QBZMPBE 0CKFDU \LFZ WBM^ 0CKFDU \LFZ WBM^ 4UPSFE0CKFDU <> ͖ͬ͞ͷਤΔ
qVY w ͜ͷΞʔΩςΫνϟͷ໊લ͕qVYɺGBDFCPPLqVYϦ ϑΝϨϯε࣮ɺ%JTQBUDIFSͷίʔυ͕ͪΐΖͬͱॻ͍ ͯ͋Δ͚ͩ w qVYJCMFͱ͔BSEBͱ͔SFqVYͱ͔ɺqVYΞʔΩςΫ νϟͷ࣮ࢁ͋Δ w ݱࡏաظͰελϯμʔυ͕ଘࡏ͠ͳ͍ɺΈΜͳԶ͕
ߟ͑ͨ࠷ڧͷqVY࣮Λ࡞͍ͬͯΔઓࠃཚੈ
qVY w ϥΠϒϥϦؤுͬͯબఆ͢Δ͔ࣗ࡞͢ΔʢࢲαʔόαΠυαϙʔ τ͕ॆ࣮͍ͯ͠ΔͷͰqVYJCMFΛͬͯΔʣ w αʔόαΠυ͕OPEFͱ͔KTධՁΤϯδϯΛੵΜͰΔݴޠͰ͋Εɺ࠷ ॳͷϑϩʔΛճͯ͠7JFXΛߏஙͨ͠ঢ়ଶͰϢʔβʹฦͤΔ w "DUJPO݅ذͰαʔόͳΒ%#ϦΫΤετɺΫϥΠΞϯτݺͼ ग़͠ͳΒ)551ϦΫΤετ͢Δͱ͔ॻ͍͓͚͍͍ͯ
w όοΫΤϯυʹ"1*Λ࣋ͭܗࣜͳΒTVQFSBHFOUͱ͔Ͱ)551ϝιο υΛαʔόʔͱΫϥΠΞϯτͰڞ௨Խ͓͚͍͍ͯ͠
qVY w ͔͜͜ΒޙͭͷίϯϙʔωϯτΛݸʑʹઆ໌͠·͢
"DUJPO "
"DUJPO "DUJPO QBZMPBE )551 +40/ \LFZ WBM^ "DUJPO %JTQBUDIFS "1*
VQEBUF 0CKFDU \LFZ WBM^ %JTQBUDIFS τϦΨʔ͞ΕͨΠϕϯτʹԠͯ͡)551͠ ͨΓͯ͠σʔλΛߏஙɺߏஙͨ͠σʔλ Λ%JTQBUDIFS͢ "1*͔Β σʔλΛऔΔ σʔλΛ ૹ͢Δ 0CKFDU \LFZ WBM^ "
"DUJPO "DUJPO QBZMPBE )551 +40/ \LFZ WBM^ "DUJPO %JTQBUDIFS "1*
VQEBUF 0CKFDU \LFZ WBM^ %JTQBUDIFS λΠϜϥΠϯͷ࣮ͩͱॳճΞΫηεϖʔ δΛ࠷Լ෦·ͰεΫϩʔϧͨ࣌͠ʹɺ"1* ʹNBY@JEͱ͔͚ͭͯ࣍ͷΞΠςϜΛ͍ ߹Θͤͯ%JTQBUDIFS͢ײ͡ "1*͔Β σʔλΛऔΔ σʔλΛ ૹ͢Δ 0CKFDU \LFZ WBM^ "
%JTQBUDIFS %
"DUJPO %JTQBUDIFS 4UPSF VQEBUF VQEBUF σʔλΛ ૹ͢Δ σʔλΛ ஷΊΔ %JTQBUDIFS
4UPSF 0CKFDU \LFZ WBM^ 0CKFDU \LFZ WBM^ "DUJPO͔Β໋ྩͱσʔλ͕དྷΔͷͰ໋ྩʹ ߹ΘͤͨૹઌσʔλΛ৴͢Δɺ࣮ ͨͩͷ&WFOU&NJUUFSͰΑ͍ 0CKFDU \LFZ WBM^ 0CKFDU \LFZ WBM^ %
"DUJPO %JTQBUDIFS 4UPSF VQEBUF VQEBUF %JTQBUDIFS 4UPSF 4UPSF 0CKFDU \LFZ
WBM^ 0CKFDU \LFZ WBM^ 0CKFDU \LFZ WBM^ %JTQBUDIFS 4UPSF σʔλΛ ૹ͢Δ σʔλΛ ஷΊΔ ෳͷ4UPSFσʔλΛૹ͢ΔՄೳੑ͕͋Δɺ %JTQBUDIFSͷଘࡏʹΑΓ"DUJPOૹઌΛؾ ʹ͠ͳͯ͘Α͘ͳΔ 0CKFDU \LFZ WBM^ 0CKFDU \LFZ WBM^ %
"DUJPO %JTQBUDIFS 4UPSF VQEBUF VQEBUF %JTQBUDIFS 4UPSF 4UPSF 0CKFDU \LFZ
WBM^ 0CKFDU \LFZ WBM^ 0CKFDU \LFZ WBM^ %JTQBUDIFS 4UPSF σʔλΛ ૹ͢Δ σʔλΛ ஷΊΔ 0CKFDU \LFZ WBM^ 0CKFDU \LFZ WBM^ % λΠϜϥΠϯͷ࣮ͩͱɺड৴ͨ͠σʔλΛϗʔϜ ͷλΠϜϥΠϯ FH ͱϢʔβ͝ͱͷλΠϜϥΠ ϯ FHHFUB ͦΕͧΕૹ͓ͯ͘͠ײ͡
4UPSF 4
%JTQBUDIFS 4UPSF 7JFX VQEBUF USJHHFS σʔλΛ ஷΊΔ σʔλΛ දݱ͢Δ 0CKFDU
\LFZ WBM^ 4UPSFE0CKFDU <> 4UPSF 0CKFDU \LFZ WBM^ 7JFX 4UPSFE0CKFDU <> %JTQBUDIFS͔Β͞ΕͨσʔλΛ໋ྩʹ߹ Θͤͯૢ࡞͢Δ ෦ͷ࣮ੜͷ0CKFDU͔ɺͨͩͷ #BDLCPOF$PMMFDUJPOͰΑ͍ JEͰϢχʔΫ ʹͨ͠ΓDPNQBSBUPS͚ͭͨΓͰ͖ΔͷͰ 4
%JTQBUDIFS 4UPSF 7JFX VQEBUF USJHHFS σʔλΛ ஷΊΔ σʔλΛ දݱ͢Δ 0CKFDU
\LFZ WBM^ 4UPSFE0CKFDU <> 4UPSF 0CKFDU \LFZ WBM^ 7JFX 4UPSFE0CKFDU <> 4UPSFෳͷ7JFX σʔλΛૹ͢ΔՄೳੑ͕͋Δ 7JFX 4UPSFE0CKFDU <> 4
%JTQBUDIFS 4UPSF 7JFX VQEBUF USJHHFS σʔλΛ ஷΊΔ σʔλΛ දݱ͢Δ 0CKFDU
\LFZ WBM^ 4UPSFE0CKFDU <> 4UPSF 0CKFDU \LFZ WBM^ 7JFX 4UPSFE0CKFDU <> %JTQBUDI͞Εͨ࣌Ͱ σʔλΛૹ͠ͳ͍ࣄ͋Δ ϚϨ 7JFX 4UPSFE0CKFDU <> 4
%JTQBUDIFS 4UPSF 7JFX VQEBUF USJHHFS σʔλΛ ஷΊΔ σʔλΛ දݱ͢Δ 0CKFDU
\LFZ WBM^ 4UPSFE0CKFDU <> 4UPSF 0CKFDU \LFZ WBM^ 7JFX 4UPSFE0CKFDU <> 4UPSFJOQVUͱPVUQVUͷΠϯλʔϑΣʔεΛ͍࣋ͬͯ Δɺྫ͑JOQVUͰ#BDLCPOF$PMMFDUJPOBEEͯ͠ɺ PVUQVUͰUP+40/ ͯ͠σʔλΛు͖ग़͢ײ͡ $PMMFDUJPOͷΠϯελϯεӅณ͞ΕͯΔͱ͍͍ 4 #BDLCPOF$PMMFDUJPO
%JTQBUDIFS 4UPSF 7JFX VQEBUF USJHHFS σʔλΛ ஷΊΔ σʔλΛ දݱ͢Δ 0CKFDU
\LFZ WBM^ 4UPSFE0CKFDU <> 4UPSF 0CKFDU \LFZ WBM^ 7JFX 4UPSFE0CKFDU <> λΠϜϥΠϯͷ࣮ͩͱɺड৴ͨ͠σʔλΛϗʔϜͷλΠ ϜϥΠϯ FH ͱϢʔβ͝ͱͷλΠϜϥΠϯ FHHFUB Λผͷ4UPSF͕࣋ͬͯͨΓɺ4UPSFͷ෦ͰΠϯελϯεΛ ผʑʹཧͯ͠JOQVUͰৼΓ͚ͨΓ 4 #BDLCPOF$PMMFDUJPO
7 7JFX
"DUJPO 4UPSF 7JFX "DUJPO QBZMPBE 4UPSFE0CKFDU <> 7 4UPSF 7JFX
4UPSFE0CKFDU <> 4UPSF͔Β͞ΕͨσʔλΛදݱ͢Δ ࣮3FBDU͕͓͢͢Ί͞Ε͍ͯΔ
"DUJPO 4UPSF 7JFX "DUJPO QBZMPBE 4UPSFE0CKFDU <> 7 4UPSF 7JFX
4UPSFE0CKFDU <> 4UPSF͕ߋ৽͞ΕΔͱɺσʔλ͕7JFXʹͬͯ͘Δ 3FBDUͦͷσʔλʹै͍%0.Λࠩߋ৽͢Δ
"DUJPO 4UPSF 7JFX "DUJPO QBZMPBE 4UPSFE0CKFDU <> 7 4UPSF 7JFX
4UPSFE0CKFDU <> 4UPSFΛ࣋ͨͳ͍߹͋Δ
"DUJPO 4UPSF 7JFX "DUJPO QBZMPBE 4UPSFE0CKFDU <> 7 4UPSF 7JFX
4UPSFE0CKFDU <> 7JFX4UPSFΛॻ͖͍͚͑ͯͳ͍ 7JFXΠϕϯτΛࢹ͢Δ͚ͩɺ σʔλϑϩʔৗʹ4UPSF͔Β7JFX ❌
"DUJPO 4UPSF 7JFX "DUJPO QBZMPBE 4UPSFE0CKFDU <> 7 4UPSF 7JFX
4UPSFE0CKFDU <> ෳͷ4UPSF͔Β σʔλΛड͚औΔՄೳੑ͕͋Δ 4UPSF 4UPSFE0CKFDU <>
"DUJPO 4UPSF 7JFX "DUJPO QBZMPBE 4UPSFE0CKFDU <> 7 7JFXൃੜͨ͠ΠϕϯτʹԠͯ͡ "DUJPOΛൃߦ͢Δ͜ͱ͕Ͱ͖Δ
JOQVUDIBOHFE OFYUQBHF 7JFX "DUJPO QBZMPBE "DUJPO
"DUJPO 4UPSF 7JFX "DUJPO QBZMPBE 4UPSFE0CKFDU <> 7 "DUJPOΛൃߦ͠ͳ͍߹͋Δ 7JFX
"DUJPO QBZMPBE "DUJPO
"DUJPO 4UPSF 7JFX "DUJPO QBZMPBE 4UPSFE0CKFDU <> 7 ෳͷ"DUJPOΛऔΓѻ͏߹͋Δ 7JFX
"DUJPO QBZMPBE "DUJPO "DUJPO QBZMPBE "DUJPO
"DUJPO 4UPSF 7JFX "DUJPO QBZMPBE 4UPSFE0CKFDU <> 7 7JFX4UPSF͔Β͞ΕͨσʔλΛ ࣗͰߋ৽͍͚ͯ͠ͳ͍
7JFX "DUJPO QBZMPBE "DUJPO ❌
"DUJPO 4UPSF 7JFX "DUJPO QBZMPBE 4UPSFE0CKFDU <> 7 4UPSFͷใΛߋ৽͢Δ߹"DUJPOΛൃߦ͠ %JTQBUDIFSܦ༝Ͱ4UPSFΛߋ৽͠มߋ௨ΛडऔΔ
7JFX "DUJPO QBZMPBE 4UPSF
ͬͯΈͯ w ઃܭͷ͜ͱΛ͍͢͝ߟ͑Δɺͱʹ͔͘ߟ͑Δ w σʔλߏͷࣄ͚ͩߟ͑ͯΔɺͲ͏ͬͯೖख͢Δ͔ɺ Ͳ͏ͬͯฤू͢Δ͔ɺͲ͏͍͏ॱ൪Ͱมߋ͢Δ͔ w %0.ͷࣄຆͲߟ͑ͳ͍ɺਖ਼͍͠σʔλਖ਼͍͠%0. ʹͳΔӡ໋ʹ͋ΔͷͰ΄ͬͱ͍͍͍ͯ w
खΊͬͪΌݮΔ w Ͱिؒલͷࣗͷίʔυ͕ಡΊΔ
ͬͯΈͯ w 3FBDU͕ݡ͍ɺಛʹ8"3/ϝοηʔδ w ͪΐͬͱҳ͢Δͱ͙͢ܯࠂग़ͯ͘͠ΕΔ w ʮ͜͜ɺ͜ͷϓϩύςΟΓͳ͍ΑͶʁʯ w ʮαʔόͱΫϥΠΞϯτͰظͯ͠Δ%0.ҧ͘Ͷʁʯ
ͬͯΈͯ w υΩϡϝϯτ͕ॆ࣮ͯ͠ΔɺεϥΠυهࣄଟ͍ w શ෦ॻ͍ͯ͋ΔɺಡΊΘ͔Δ
Ҏ্