我正在编写一个 Web 部件以从 SharePoint Online 查询数据,返回的数据使用 DetailsList 组件显示,我遇到的问题是查询需要很长时间才能返回结果,Web 部件没有得到刷新并停留在“空”页面上:
对于需要 1-2 秒的快速查询,Web 部件会更新并正常显示结果:
我还想通过使用displayLoadingIndicator()向我的用户提供反馈,以显示 Web 部件很忙,但我无法让它工作。
这是我的代码(为简单起见缩写):
- NavigatorWebPart.ts
export default class NavigatorWebPart extends BaseClientSideWebPart<INavigatorWebPartProps> {
protected onInit(): Promise<void> {
this.context.statusRenderer.displayLoadingIndicator(this.domElement, "Querying items...");
return super.onInit();
}
public render(): void {
const element: React.ReactElement<INavigatorProps> = React.createElement(Navigator, {});
ReactDom.render(element, this.domElement);
}
- 导航器.tsx
let listItems : any[] = [];
const listColumns : IColumn[] = [... // shortened for brevity
export default class Navigator extends React.Component<INavigatorProps, IListMembers> {
constructor(props) {
super(props);
this.queryLists();
// this.context.statusRenderer.clearLoadingIndicator(this.domElement);
this.state = {
items : listItems,
columns : listColumns,
compactMode : false
};
}
public render(): JSX.Element {
const { items, columns, compactMode } = this.state;
return (
<div>
<div className='ms-SearchBoxSmall'>
<CommandBar
isSearchBoxVisible={ true }
items={ [] }
farItems={ this.listFarItems }
/>
</div>
<br />
<div>
<DetailsList
items={ items }
columns={ columns }
compact={ compactMode }
layoutMode={ DetailsListLayoutMode.justified }
selectionMode={ SelectionMode.none }
onColumnHeaderClick={ this._onColumnClick }
/>
</div>
</div>
);
}
public async queryLists() {
await sp.web.lists
.filter("Hidden eq false")
.expand('RootFolder')
.get()
.then( response => {
response.forEach( (item, index) => {
var newData = new Date(item.LastItemModifiedDate).toLocaleDateString() + ' ' + new Date(item.LastItemModifiedDate).toLocaleTimeString();
listItems.push({
"ID" : index,
"URL" : item.RootFolder.ServerRelativeUrl,
"Icon" : item.BaseTemplate,
"Title" : item.Title,
"Total" : item.ItemCount,
"Modified" : newData
});
});
});
}