2015-09-12 2 views
2

Я читал о immutable.js, и преимущества в производительности, которые он может дать вам в ваших реакциях реагирования, реализовав shouldComponentUpdate(), который проверяет, изменились ли реквизит или состояние.Netflix Falcor работает вместе с Immutable.js?

Кроме того, я хотел бы использовать Netflix Falcor в своем приложении, возможно ли каким-либо образом использовать коллекции immutable.js внутри моделей falcor?

Или есть способ реализовать shouldComponentUpdate() с моделями falcor, которые будут проверять изменения и будут быстрыми (например, с immutable.js)?

+0

Я также думал об этом предмете. Я не уверен, что это будет новый DataSource, Model или что-то еще полностью, как какой-то фасад или прокси. – sigmus

ответ

1

Хм, я долго думал о том же. Дело в том, что falcor является сборщиком данных json graph, а immutablejs - о сериализации/десериализации данных для использования в компонентах реакции. Он должен найти общую основу между двумя или каким-либо видом api, чтобы впоследствии их обменивать данными, получая данные (falcor) и обрабатывая (immutablejs) данные.

Лучший метод, который я думаю, что до сих пор есть модель Falcor объявить как метод апи, который вы передаете действия (потока), как обещания, я использую alt в реализации, так и в апи, webUtilAPI.js может выглядеть следующим образом

'use strict'; 
let Api = exports; 
import { Promise } from 'es6-promise'; 
import { falcor } from 'falcor'; 

Api.getFalcorData =() => { 
    return new Promise((resolve) => { 
     var model = new falcor.Model({ 
      source: new falcor.HttpDataSource('/model.json') 
     }); 

     model.get("somedata").then((response) => { 
      resolve(response.json.somedata) 
     }); 
    }) 
} 

впоследствии в действиях вы можете сериализовать его с immutablejs

'use strict'; 
import UUID  from 'node-uuid'; 
import Immutable from 'immutable'; 
import alt from '../alt'; 
import webUtilAPI from '../api/webUtilAPI'; 

class ActionCreators { 

    constructor() { 

     this.generateActions(
      'falcorToImmutable', 
     ); 
    } 
    getFalcor() { 

     var that = this; 

     return webUtilAPI.getFalcorData() 
     .then(success(arr) => { 
      var data = Immutable.fromJS({ id: UUID.v4(), arr }) 
      that.alt.getActions('ActionCreators').falcorToImmutable(data); 
     }); 
    } 
} 
module.exports = ActionCreators;