【发布时间】:2019-08-24 17:08:39
【问题描述】:
我在一个 SP 框架应用程序中工作,该应用程序从列表中读取、分组和过滤数据。
为此,我在应用程序中有一个从 onclick 事件处理程序调用的方法。
此方法仅包含一个开关,用于检查需要调用的其他方法。它看起来像这样:
private _handleRequest(request: string): void {
switch (request) {
case 'Customer':
case 'Sales Manager':
this.groupHandler(request);
break;
case 'Agreement Ended':
this.getEnded();
break;
case 'Last Price Adjustment':
this.getPassed();
break;
default:
break;
}
}
groupHandler 方法向 Sharepoint 发送一个请求,该请求获取所有数据,然后将数据发送到 ListView 组件,该组件将其呈现在屏幕上:
private groupHandler(group: string): void {
group = group.replace(/ +/g, "");
this.setState({
groupByFields: [{
name: group,
order: GroupOrder.ascending
}]
});
} }
getEnded 和 getPassed 几乎相似,都是从 sharepoint 获取数据并在将结果发送到 ListView 组件之前对其进行过滤。 每个方法更新状态:
private getEnded(): void {
this.props.provider.getEnded().then((listItems: IList[]) => {
this.setState({
listItems: listItems
});
});
}
私有 getPassed(): 无效 {
this.props.provider.getPassed().then((listItems: IList[]) => {
this.setState({
listItems: listItems
});
});
}
它是这样初始化的:
export interface IListState {
listItems: IList[]; }
导出默认类 AgreementDatabase 扩展 React.Component { 构造函数(道具:IAgreementDatabaseProps){ 超级(道具);
this.state = {
listItems: []
};
this.groupHandler = this.groupHandler.bind(this);
}
这是我使用从 SharePoin 列表中获取的数据填充状态的 componentDidMount:
public componentDidMount(): void {
this.props.provider.getContent().then((listItems: IList[]) => {
this.setState({
listItems: listItems
});
});
}
现在的问题是,当我运行应用程序并单击调用 groupHandler 方法的链接时,列表会毫无问题地分组。当列表分组后,我单击调用 getEnded 或 getPassed 方法的链接时会出现问题。在这种情况下,列表不会在过滤结果之前重新加载。我得到的是一个带有过滤结果的分组列表。 我发布了一些图片以便更好地理解。
如何重置状态,以便每次单击按钮时,应用都会在应用过滤或分组之前获取原始状态/值?
最好的问候 美国
【问题讨论】:
-
嗯..我不完全明白:您的组件在安装时获取数据,然后您只想根据您单击的按钮过滤该数据?我不明白您在哪里检索第一张图片中显示的数据
-
我在 componentDidMount() 中获取的数据。在那里,我调用了一个方法,其中包含将请求发送到 SharePoint 列表并使用获取的数据填充状态的代码。我用那个 componentDidMount 代码更新了帖子。
-
好的,我猜对了,然后:) 最后一个我需要回答的问题:使用
groupHandler()、getEnded()和getPassed(),您只想过滤您想要的项目'已经在componentDidMount()中取得了,对吧?您不获取任何新项目,您只是“隐藏”一些已经获取的项目。我对么?如果是这样,我可以给你一个例子来说明如何实现你想要的 -
关于 getEnded 和 getPassed 我想过滤(隐藏结果)不符合条件的,例如:如果结束协议日期早于今天。为了获得该值,我正在使用该过滤器向共享点发送一个新的休息请求。现在如果有更好的方法,那就太好了。目前只有两种向 SP 发送请求的方法,但还可以更多。
-
嗯,我想更多的是改变
render()函数。我看不出来,但是..让我添加一个答案(这里写得太长了)