【问题标题】:Netflix Falcor working together with Immutable.js?Netflix Falcor 与 Immutable.js 一起工作?
【发布时间】:2015-12-08 23:44:45
【问题描述】:

我读到了 immutable.js,以及它可以通过实现检查 props 或 state 是否已更改的 shouldComponentUpdate() 在您的 react 应用程序中为您带来的性能优势。

另外,我想在我的应用程序中使用 Netflix Falcor,是否可以在 falcor 模型中以某种方式使用 immutable.js 集合?

或者有没有办法用 falcor 模型实现 shouldComponentUpdate() 来检查变化并且速度很快(就像 immutable.js 一样)?

【问题讨论】:

  • 我也在考虑这个问题。我不确定它会是一个新的数据源、模型还是完全其他的东西,比如某种门面或代理。

标签: javascript reactjs immutable.js falcor


【解决方案1】:

嗯,我在想同样的事情有一段时间了。问题是 falcor 是 json 图形数据获取器,而 immutablejs 是关于序列化/反序列化数据以用于反应组件。它应该在两者或某种 api 之间找到一个共同点,以使它们在获取数据(falcor)和处理(immutablejs)数据时进行通信。

到目前为止,我认为最好的方法是将 falcor 模型声明为 api 方法,您将其作为承诺传递给 actions(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;

【讨论】:

    猜你喜欢
    • 2019-02-27
    • 2016-10-06
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2016-07-03
    • 2015-03-08
    相关资源
    最近更新 更多