我阅读了有关 immutable.js 的内容,以及它可以通过实现 shouldComponentUpdate() 检查 props 或状态是否已更改,从而在您的 React 应用程序中为您带来的性能优势。
此外,我想在我的应用程序中使用 Netflix Falcor,是否可以以某种方式在 Falcor 模型中使用 immutable.js 集合?
或者有没有一种方法可以使用 falcor 模型来实现 shouldComponentUpdate() 以检查更改并且速度很快(就像使用 immutable.js 一样)?
最佳答案
嗯,我一直在想同样的事情。问题是 falcor 是 json 图形数据 getter ,而 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)
});
})
}
之后在 actions 中你可以用 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;
关于javascript - Netflix Falcor 与 Immutable.js 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32539976/