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
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.4k
What is CoffeeScript
geta6
8
950
Other Decks in Programming
See All in Programming
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
130
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
480
PyO3 で既存 Python 評価器を Rust core 化する ー wasm-bindgen でブラウザにも配るための設計
kdash
1
560
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
160
What We Talk About When We Talk About XP
m_seki
2
420
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
2
1.5k
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
340
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
130
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
640
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
1
150
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
210
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
How STYLIGHT went responsive
nonsquared
100
6.3k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
230
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Statistics for Hackers
jakevdp
799
230k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
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 શ෦ॻ͍ͯ͋ΔɺಡΊΘ͔Δ
Ҏ্