Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Planning for next syntagme.js #gotandajs

Planning for next syntagme.js #gotandajs

2017/07/14 #gotandajsの発表資料です

mizuki_r

July 14, 2017
Tweet

More Decks by mizuki_r

Other Decks in Technology

Transcript

  1. @mizuki_r • シニアフロントエンドエンジニア • エンジニア 2 #javascript #gotandajs #meguroes #perl

    #kichijojipm 五反田のM社で位置ゲー開発に携わる。
 最近まじでJSどころかコードをほとん ど書いてない生活。 about me こんな人です
  2. const app = syntagme() app.reducer(({ action }, state = {})

    => { switch (actio.type) { case 'FETCH': return _.defaults({ message: null }, state) case 'FETCH_RESOLVE': return _.defaults({ message: action.message }, state) case 'FETCH_REJECT': return _.defaults({ error: action.rejection }, state) } }) app.listen() app.subscribe((state) => { console.log('state', state) }) app.ac('FETCH', () => { return http.get('/api/messages/greeting') .then(({ body }) => { return { message: body.message } }) })
  3. UIを作るときのフロー • UIͱը໘ભҠΛϖʔύʔϓϩτ • ͜ͷஈ֊ͰϢʔβ͕Ͳ͏͍͏ʮߦಈʯΛΞϓϦͰߦ͏͔͕ચ͍ग़ͤΔ • HTMLʹ৘ใຒΊࠐΈɺը໘ભҠΛߏங • ஋͸ϕλͩͬͨΓಈతͩͬͨΓɺͱʹ͔͘ભҠͰ͖Δ͜ͱ͕ॏཁ •

    ΍Γͳ͕ΒreducerʹدͤΔ৘ใʹ໨੕Λ͚ͭͯ͘ • ભҠʹඞཁͳΞΫγϣϯΛ૊Έ࢝ΊΔ • ಈతͳσʔλΛreducerʹدͤΔ • stateʹ͋Δ΋ͷɺແ͍΋ͷ͔ΒAPIΛઃܭͨ͠Γ౎߹ͨ͠Γͯ͠actionCreatorͷ಺෦Λ ૊Ή • શମͷΞʔΩςΫνϟΛ੔͑Δ • actionCreatorͰAPI͔ΒσʔλΛड͚औΓɺreducerͰॲཧ͢Δ
  4. そして、こうなる app.actionCreator('FETCH', ({ key }) => { return http.get(`/api/messages/${ key

    }`) .then(({ body }) => { return { message: body.message } }) }) app.reducer(({ action }, state = {}) => { switch (actio.type) { case 'FETCH': return _.defaults({ message: null }, state) case 'FETCH_RESOLVE': return _.defaults({ message: action.message }, state) case 'FETCH_REJECT': return _.defaults({ error: action.rejection }, state) } }) app.listen() app.action('FETCH', { key: 'greeting' })
  5. いま app.reducer(({ action }, state = {}) => { switch

    (actio.type) { case 'FETCH': return _.defaults({ message: null }, state) case 'FETCH_RESOLVE': return _.defaults({ message: action.message }, state) case 'FETCH_REJECT': return _.defaults({ error: action.rejection }, state) } })
  6. 削ろう app.reducer({ FETCH ({ action }) { return { message:

    null } }, FETCH_RESOLVE ({ action }) { return { message: action.message } }, FETCH_REJECT ({ action }) { return { error: action.rejection } } })
  7. こんな感じになりました const app = syntagme() 
 app.actionCreator('FETCH', ({ key })

    => { return http.get(`/api/messages/${ key }`) .then(({ body }) => { return { message: body.message } }) }) app.reducer({ FETCH ({ action }) { return { message: null } }, FETCH_RESOLVE ({ action }) { return { message: action.message } }, FETCH_REJECT ({ action }) { return { error: action.rejection } }, }) app.listen() app.subscribe((state) => { console.log('state', state) }) app.action('FETCH', { key: 'greeting' })