我读到过immutable.js,以及通过实现shouldComponentUpdate()来检查属性或状态是否发生更改,它可以在react应用程序中为您带来的性能优势。
另外,我想在我的应用程序中使用Netflix Falcor,是否可以在falcor模型中以某种方式使用immutable.js集合?
或者,有没有一种方法可以用falcor模型实现shouldComponentUpdate(),它可以检查更改,并且会很快(就像immutable.js一样)?
发布于 2015-09-18 21:15:23
嗯,我也想了一阵子了。事实是,falcor是json图形数据抓取器,而immutablejs是序列化/反序列化数据,以便在react组件中使用。它应该在两者或某种api之间找到一个共同点,使它们在获取数据(Falcor)和随后处理(Immutablejs)数据时进行通信。
到目前为止,我认为最好的方法是让falcor模型声明为api方法,您可以将该方法作为promises传递给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;https://stackoverflow.com/questions/32539976
复制相似问题