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;
Другие вопросы по тегам