我正在尝试使用 ES6 学习 ReactJS,同时设置一个 Fixed-Data-Table 的实例。我正在使用来自 github 存储库的 ObjectDataExample 示例,但我想使用从远程 JSON 资源获取缓存的 DataListStore,而不是馈送到 DataListStore 的 faker() 值。这就是我定义我的 DataListStore 的方式:
class MyDataListStore {
constructor(/* url string */ url) {
this.url = url || 'http://localhost:8080/default-json';
this._cache = [];
this.pageSize = 1;
this.size = 0;
this.getRemoteData(url);
}
getRemoteData() {
/**
* Fetch remote JSON to be used in the store.
*/
var that = this;
fetch(this.url).then(function(response) {
return response.json();
}).then(function(j) {
console.log(j);
//this.pageSize = j["pages"];
that.size = j["total"];
that._cache = j["table"];
if (that._cache) {
// do something here?
}
});
}
getObjectAt(/*number*/ index) /*?object*/ {
if (index < 0 || index > this.size){
return undefined;
}
if (this._cache[index] === undefined) {
//this._cache[index] = this.createFakeRowObjectData(index);
}
return this._cache[index];
}
getSize() {
return this.size;
}
}
module.exports = MyDataListStore;
如您所见,我或多或少地遵循了固定数据表中的示例提供的 FakeObjectDataListStore。JSON 被正确获取,_cache 填充了一个对象数组,当你在 getRemoteData 执行后输出 getSize 时,你确实得到了 _cache 的大小。但是,我还没有弄清楚一旦获取数据后应该如何更新我的固定数据表 Table 组件。目前,表格已呈现,但只是没有行的空白。
class ObjectDataExample extends React.Component {
constructor(props) {
super(props);
this.state = {
dataList: new MyDataListStore()
};
}
render() {
var {dataList} = this.state;
return <Table
rowHeight={70} rowsCount={dataList.getSize()} width={1170} height={500} headerHeight={30}>
<Column
header={<Cell>ID</Cell>}
cell={<TextCell data={dataList} col="id" />}
width={50}
fixed={true}
/>
<Column
header={<Cell>Email</Cell>}
cell={<TextCell data={dataList} col="email" />}
width={300}
fixed={true}
/>
</Table>
}
}
module.exports = ObjectDataExample;
我认为主要问题是一旦 MyDataListStore 填充了来自异步调用的数据,我就没有任何代码来填充表。但是,我无法从 Fixed-Data-Table github repo 或文档中给出的示例中找到任何帮助。知道如何完成这项工作吗?我假设我需要设置某种事件侦听器,但我不确定在哪里/如何执行此操作,因为我对 ReactJS 和 Fixed-Data-Table 仍然是新手。
编辑:我还应该补充一点,当页面加载时,我收到以下错误: Uncaught TypeError: Cannot read property 'id' of undefined 一旦我将初始 this.size 设置为大于 0。所以当然表没有首次加载时具有可用数据。
编辑2:在进一步研究之后,看起来如果我在我的 ObjectDataExample 的 componentDidMount 中运行 fetch 并使用 this.setState(); 重置 dataList 对象,然后我更新表。但是,这看起来有点混乱,我认为有更好的方法可以直接从我的 MyDataListStore 对象执行此操作。
谢谢,