我阅读了有关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;