Netflix Falcor работает вместе с Immutable.js?
Я читал о immutable.js, а также о преимуществах производительности, которые он может дать вам в ваших приложениях реагирования, реализуя shouldComponentUpdate(), который проверяет, изменились ли реквизиты или состояние.
Кроме того, я хотел бы использовать Netflix Falcor в своем приложении, возможно ли каким-то образом использовать коллекции immutable.js внутри моделей falcor?
Или есть способ реализовать shouldComponentUpdate() с моделями ошибок, который будет проверять изменения и будет быстрым (как в случае с immutable.js)?
1 ответ
Хм, я думал об одном и том же некоторое время. Суть в том, что сборщик данных json graph имеет значение Falcor, а immutablejs - о сериализации / десериализации данных для использования в реагирующих компонентах. Он должен найти общий язык между двумя или какими-то API-интерфейсами, чтобы они могли обмениваться данными при извлечении данных (falcor) и обработке (immutablejs) данных впоследствии.
На мой взгляд, лучший способ, чтобы модель falcor объявлялась как метод api, который вы передаете действиям (flux) как обещания, я использую alt в качестве реализации, поэтому в api файл 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;