我阅读了有关immutable.js的信息,并了解了它通过实现shouldComponentUpdate()来检查 Prop 或状态是否改变的性能,从而为您的应用程序提供性能优势。

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

还是有一种方法可以用falcor模型来实现shouldComponentUpdate(),该模型将检查更改并很快(例如使用immutable.js)?

最佳答案

嗯,我有一段时间想着同样的事情。事实是falcor是json图形数据获取程序,而immutablejs则是对要在React组件中使用的数据进行序列化/反序列化。它应该在两种或某种类型的api之间找到一个共同点,以使它们在获取数据(falcor)和随后处理(immutablejs)数据时进行通信。

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

09-25 22:19