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

フロントエンドMVCとFlux

 フロントエンドMVCとFlux

SED 〜SIROK技術勉強会 #3「フロントエンドMVCとFlux(仮)」〜
https://atnd.org/events/68943

Shotaro Watanabe

August 14, 2015
Tweet

Transcript

  1. MVC

  2. UIͷঢ়ଶ͸Ͳ͜ʹ͋Δͷ͔ • Model or View(਌View or ࢠView) • ͦ΋ͦ΋ҙࣝͯ͠ঢ়ଶΛ؅ཧ͍ͯ͠Δ͔? •

    Model͕ͨͩͷσʔλModelʹͳͬͯͳ͍͔? • ViewͰෳࡶͳσʔλॲཧΛ͍ͯ͠ͳ͍͔ʁ
  3. ߏ੒ྫ(TODOΛ࡞Δ͚ͩͷΞϓϦ) src ├── actions │ └── todo-action-creators.js ├── app-constants.js ├──

    app-dispatcher.js ├── app.js ├── stores | └── todo-store.js └── views ├── todo-controller-view.react.js └── todo-item.react.js
  4. // todo-action-creators.js import AppDispatcher from '../app-dispatcher'; import AppConstants = from

    '../app-constants'; var TodoActionCreators = { create: function(text) { AppDispatcher.dispatch({ actionType: AppConstants.TODO_CREATE, // type text: text // data }); } } export default TodoActionCreators;
  5. // todo-store.js let _todos = {}; // private data //

    setter function create(text) { let id = (+new Date()).toString(); _todos[id] = { id: id, text: text }; } class TodoStore extend EventEmitter { constructor() { // TODO: Register dispatcher callback } // getter getAll() { return _todos; } emitChange() { this.emit('change'); } } export default new TodoStore;
  6. // Register dispatcher callback AppDispatcher.register(action => { switch(action.actionType) { case

    AppConstants.TODO_CREATE: let text = action.text.trim(); if (text !== '') { create(text); this.emitChange(); // Emit change event } break; default: // no op } });
  7. Controller View & View Controller View • ϧʔτ(ʹ͍ۙ)View • StoreͷมԽΛ؂ࢹ

    • ࣗ਎ͱࢠViewΛϨϯμϦϯά View • ྲྀΕ͖ͯͨσʔλΛݩʹϨϯμϦϯ ά